У меня небольшие проблемы с созданием липкой формы, которая будет помнить, что было введено в нее при отправке формы, если значение имеет двойные кавычки. Проблема в том, что HTML должен читать что-то вроде:
<input type = "text" name = "something" value = "Whatever value you entered" />
Однако если фраза: «Как мне это сделать?» вводится в кавычках, итоговый HTML-код выглядит примерно так:
<input type = "text" this? = "" do = "" i = "" how = "" value = "" name = "something"/>
Как мне фильтровать двойные кавычки? Я пробовал включать и выключать волшебные кавычки, использовал полосы косой черты и дополнительные косые черты, но пока не нашел правильного решения. Как лучше всего решить эту проблему для PHP?






Вы хотите htmlentities ().
<input type = "text" value = "<?php echo htmlentities($myValue); ?>">
Спасибо, это сработало. Не знаю, почему я не подумал об этом.
htmlspecialchars должно быть достаточно
Вышеупомянутое будет кодировать всевозможные символы, которые имеют код объекта html. Я предпочитаю использовать:
htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');
Это будет только кодировать:
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
Вы также можете сделать strip_tags в $ myValue, чтобы удалить теги html и php.
Кроме того, убедитесь, что ваша кодировка текста - UTF-8 для вышеуказанного. Обычно вы можете опустить этот последний параметр в htmlspecialchars, если хотите.
вы не указываете кодировку stackoverflow.com/questions/6181299/…
Вот что я использую:
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 и производит тарабарщину.Как предполагает умный, htmlspecialchars кодирует только зарезервированные символы HTML, в то время как htmlentities преобразует все, что имеет представление HTML. В большинстве случаев любой из них сработает. Здесь - это обсуждение на эту тему.
И еще одно: лучше всего держать магические кавычки отключенными, поскольку они дают ложное ощущение безопасности и устарели в версии 5.3.0 и удалены из версии 5.4.0. Если они включены, каждая цитата в ваших полях будет предваряться обратной косой чертой при обратной передаче (а несколько обратных передач будут добавлять все больше и больше косой черты). Я вижу, что OP может изменить настройку, но для справок в будущем: если вы находитесь на общем хосте или иным образом не имеете доступа к php.ini, самый простой способ - добавить
php_flag magic_quotes_gpc Off
в файл .htaccess.
ENT_HTML5 дублирует htmlspecialchars. См. stackoverflow.com/a/14532168/427545. Хорошая поломка, +1
Это не результирующий HTML-код, а представление полученного узла DOM после того, как ваш браузер [неверно] интерпретировал и исказил его.