Cakephp: апостроф в URL и кеш просмотра

У меня проблема с кешем, если в URL-адресе есть апостроф.

Например: www.example.com/controller/action/What's+My+Name

При первой загрузке, когда кеша нет, загружается нормально. Однако после создания кеша последующая загрузка страницы вызывает синтаксическую ошибку PHP, потому что в файле кеша есть строка:

$controller->here = $this->here = '/controller/action/Как меня зовут?';

Обратите внимание, что апостроф не экранирован и, следовательно, синтаксическая ошибка PHP.

Как я могу это исправить? Считается ли это ошибкой в ​​Cake?

Спасибо.


person TopQ    schedule 17.03.2011    source источник
comment
Я бы посчитал, что создание недопустимых URL-адресов является ошибкой в ​​​​вашем коде. Пробелы недопустимы в html.   -  person Tyler Eaves    schedule 17.03.2011
comment
Я знаю, что вы имели в виду «urls», а не «html», но вы можете отредактировать свой комментарий.   -  person Abba Bryant    schedule 18.03.2011


Ответы (2)


Используя функцию PHP urlencode(), закодируйте компоненты вашего URL-адреса, которые могут содержать не буквенно-цифровые символы, прежде чем передавать их в HtmlHelper::link или что-то еще.

Вы также можете рассмотреть более крупный вопрос о том, стоит ли в первую очередь использовать не буквенно-цифровые символы в ваших URL-адресах, и есть ли реальная потребность в этом.

person Daniel Wright    schedule 17.03.2011
comment
На самом деле мне приходится выполнять всю кодировку на стороне клиента с помощью JavaScript. Я использовал encodeURIComponent(), и он не кодирует апостроф. Escape() делает, однако, Cakephp по-прежнему декодирует его обратно в ' в файле кеша... - person TopQ; 17.03.2011

Вернемся к исходному ответу. Вы создаете недопустимые URL-адреса и каким-то образом ожидаете, что структура не сломается?

Либо избегайте их (urlencode) на стороне сервера, либо сгенерируйте слаг для URL-адреса.

Злоупотребление URL-адресом, как вы делаете, приведет к противоречивым результатам - на стороне клиента и на стороне CakePHP. Это не двусмысленный случай - вы делаете это неправильно.

person Abba Bryant    schedule 17.03.2011
comment
Спасибо, но я должен был дать понять, что я urlencode URL. Я просто не показывал здесь закодированный URL. - person TopQ; 18.03.2011
comment
Я думаю, что тогда вам лучше всего использовать поведение slug, которое преобразует пробелы, апострофы и т. д. в дефисы или другой формат, удобный для URL. - person Abba Bryant; 18.03.2011