Экранирование двойных кавычек в значении липкой формы в PHP

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

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

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

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

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

Это не результирующий HTML-код, а представление полученного узла DOM после того, как ваш браузер [неверно] интерпретировал и исказил его.

Lightness Races in Orbit 04.07.2011 21:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
1
8 368
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

Спасибо, это сработало. Не знаю, почему я не подумал об этом.

VirtuosiMedia 08.11.2008 02:22

htmlspecialchars должно быть достаточно

troelskn 08.11.2008 02:53

Вышеупомянутое будет кодировать всевозможные символы, которые имеют код объекта 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.

Кроме того, убедитесь, что ваша кодировка текста - UTF-8 для вышеуказанного. Обычно вы можете опустить этот последний параметр в htmlspecialchars, если хотите.

thesmart 08.11.2008 02:34

вы не указываете кодировку stackoverflow.com/questions/6181299/…

dynamic 28.11.2012 00:33

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

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

Lekensteyn 26.01.2013 04:26

Другие вопросы по теме