Вы не можете остановить декодирование сущностей в текстовой области [1], поскольку содержимое текстовой области имеет значение , а не (в отличие от элемента скрипта или стиля), свойственное CDATA, даже если восстановление после ошибки может иногда создается впечатление, что это так.
Определение элемента textarea:
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
т.е. он содержит PCDATA, который описывается как :
Текст документа (обозначается конструкцией SGML "#PCDATA"). Текст может содержать ссылки на символы. Напомним, что они начинаются с &
и заканчиваются точкой с запятой (например, Hergé's adventures of Tintin
содержит ссылку на символьную сущность для символа e острый ).
Это означает, что когда вы вводите (недействительный HTML) «начало тега» (<
), браузер исправляет его как «меньше чем знак» (<
), но когда вы вводите «начало объекта» ( &
), что разрешено , исправление ошибок не производится.
Вам нужно написать, что вы имеете в виду. Если вы хотите включить некоторый HTML в качестве данных, вы должны преобразовать любой символ со специальным значением в соответствующую ему ссылку на символ.
Если данные:
<div
Тогда HTML должен быть:
<textarea>&lt;div</textarea>
Вы можете использовать стандартные функции для преобразования этого (например, PHP htmlspecialchars
или Perl HTML :: Entities модуль ).
NB 1: Если вы использовали XHTML [2] (и действительно используете его, , он не считается, если вы используете его как text / html ), тогда вы можете использовать явный блок CDATA:
<textarea><![CDATA[<div]]></textarea>
Примечание 2. Или, если браузеры правильно реализовали HTML 4
Хорошо, но вопрос в том. почему он их все равно декодирует? при условии, что я добавил &, сохраните текстовую область, ti будет сохранен & lt; , но отображается как <, сохранение его снова преобразует его обратно в <(но оно останется <в базе данных), сохранение снова сохранит его <в базе данных, почему текстовая область его декодирует? </p>
- Сервер отправляет (в браузер) данные, закодированные как HTML .
- Браузер отправляет (на сервер) данные, закодированные как application / x-www-form-urlencoded (или multipart / form-data).
Поскольку браузер не отправляет данные в формате HTML, символы не представляются в виде объектов HTML.
Если вы берете данные, полученные от клиента, а затем помещаете их в документ HTML, то сначала вы должны закодировать их как HTML.