Выпуск CakePHP htmlentities - PullRequest
       13

Выпуск CakePHP htmlentities

0 голосов
/ 19 октября 2011

У меня странная проблема с классом CakePHP "Sanitize". Что делает проблему странной, так это то, что проблема присутствует только в контроллерах, а не в представлениях.

Вот URL:

http://example.com/testing/index?test=r%E9sum%E9

Вот код:

echo '<p>Test: -' . 'résumé' . '-</p>';
echo '<p>Test: -' . $_GET['test'] . '-</p>';
echo '<p>Test: -' . Sanitize::html($_GET['test']) . '-</p>';

И это то, что приведенный выше код выводит независимо от того, выполняется ли код с контроллера или из представления:

Test: -résumé-

Test: -r�sum�-

Test: --

Когда я выполняю код из представления, все в порядке, но когда я выполняю код из контроллера, генерируется это предупреждение:

Warning: Warning (2): htmlentities() [<a href='function.htmlentities'>function.htmlentities</a>]: Invalid multibyte sequence in argument in [/Applications/MAMP/htdocs/dev/cake/libs/sanitize.php, line 120]

Почему это предупреждение генерируется только из контроллера, а не из вида? Что я могу сделать, чтобы это исправить?

Я пробовал это с использованием PHP 5.2.17 и 5.3.3. Я также пробовал несколько версий CakePHP, включая 1.3.13.

1 Ответ

0 голосов
/ 19 октября 2011

Я пишу ответ, потому что для ясности людям, которые не читают комментарии: P

попробуй

echo '<p>Test: -' . utf8_encode($_GET['test']) . '-</p>';

если не попробуй

echo '<p>Test: -' . utf8_decode($_GET['test']) . '-</p>';

у вас есть конфликт между набором символов между словом, кодировкой файла как таковой или кодировкой тортов или кодировкой php

sanitize использует функцию php htmlentities, если она имеет неправильную кодировку, которую она может датьВы ошибаетесь в специальных символах (sanitize использует utf8, если не указано иное: S), вы можете использовать его с utf8_encode, чтобы увидеть, что он также работает;)

убедитесь, что ваш контроллер и файлы просмотра являются utf8, также вашими БД иНастройка тортов и конфигурация вашего php-сервера, поэтому вам не нужна функция: надеюсь, она поможет вам (перезагрузите сервер при необходимости)

$ _ GET всегда получает urldecoded (еще одна функция php), я предполагаю, что этодекодируется либо в вашу кодировку php-файла, либо в конфигурацию кодировки php.ini, не уверен прямо сейчас ...

но в любом случае, если вы сохраните настройки кодирования такими же, у вас не будет профессионалаи помните, что кодировка php-файла - это сам файл, а НЕ метатег, описывающий кодировку ...

Надеюсь, это поможет вам в будущем:)

...