Избегание двойных кавычек в значении для липкой формы в PHP - PullRequest
4 голосов
/ 08 ноября 2008

У меня небольшие проблемы с созданием липкой формы, которая будет помнить, что вводится в нее при отправке формы, если значение имеет двойные кавычки. Проблема в том, что HTML должен читать что-то вроде:

<input type="text" name="something" value="Whatever value you entered" />

Однако, если фраза: «Как мне это сделать?» набирается с кавычками, полученный HTML-код похож на:

<input type="text" this?="" do="" i="" how="" value="" name="something"/>

Как мне отфильтровать двойные кавычки? Я пробовал это с включенными и выключенными магическими кавычками, я использовал полосы и аддеш, но пока не нашел правильного решения. Какой лучший способ обойти эту проблему для PHP?

Ответы [ 3 ]

13 голосов
/ 08 ноября 2008

Вы хотите htmlentities () .

<input type="text" value="<?php echo htmlentities($myValue); ?>">

11 голосов
/ 08 ноября 2008

Выше будет кодировать все виды символов, которые имеют HTML-код объекта. Я предпочитаю использовать:

htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');

Это будет только кодировать:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

Вы также можете сделать strip_tags на $ myValue для удаления тегов html и php.

3 голосов
/ 11 октября 2012

Вот что я использую:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
  • ENT_QUOTES говорит PHP преобразовывать одинарные и двойные кавычки, что я считаю желательным.
  • ENT_SUBSTITUTE и ENT_DISALLOWED имеют дело с недействительным Unicode. Они очень похожи - насколько я понимаю, первая заменяет недопустимые кодовые последовательности, то есть недопустимо закодированные символы или последовательности, которые не представляют символы , а вторая заменяет недопустимые кодовые точки для данного типа документа , т.е. символов, которые не разрешены для указанного типа документа (или по умолчанию, если явно не указано). Документация нежелательно лаконична для них.
  • ENT_HTML5 - это тип документа, который я использую. Вы можете использовать другой, но он должен соответствовать вашему типу страницы.
  • UTF-8 - кодировка моего документа. Я полагаю, что, если вы не уверены, что используете PHP 5.4.0, вы явно указываете кодировку, особенно если вы имеете дело с неанглийским текстом. Хост, над которым я работаю, использует что-то 5.2.something, по умолчанию ISO-8859-1 и производит тарабарщину.

Как подсказывает thesmart , htmlspecialchars кодирует только зарезервированные символы HTML, тогда как htmlentities преобразует все, что имеет представление HTML. В большинстве случаев любой из них сделает свою работу. Здесь - дискуссия на эту тему.

Еще одна вещь: рекомендуется не использовать магические кавычки, поскольку они дают ложное чувство безопасности и устарели в 5.3.0 и удалены из 5.4.0. Если они включены, к каждой цитате в ваших полях будет добавляться обратный слеш при обратной передаче (и несколько обратных ссылок будут добавлять все больше и больше косых черт). Я вижу, что OP может изменить настройку, но для будущих ссылок: если вы находитесь на общем хосте или иным образом не имеете доступа к php.ini, самый простой способ - добавить

php_flag magic_quotes_gpc Off

в файл .htaccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...