Как остановить HTML TEXTAREA от декодирования HTML-сущностей
у меня странная проблема:
в базе данных у меня есть буквальный амперсанд lt точка с запятой:
<div
всякий раз, когда его печатают в тег html textarea, исходный код страницы показывает >
as >
.
как остановить это декодирование?
6 ответов
в PHP это можно сделать с помощью htmlentities (). Пример ниже.
<?php
$content = "This string contains the TM symbol: ™";
print "<textarea>". htmlentities($content) ."</textarea>";
?>
без htmlentities () textarea будет интерпретировать и отображать символ TM ( ™ ) вместо "™".
вы не можете остановить декодирование сущностей в textarea[1], так как содержимое textarea не (в отличие от скрипта или элемента стиля) встроенный CDATA, даже если восстановление ошибок может иногда создать впечатление, что это.
определение элемента textarea:
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
т. е. он содержит PCDATA, который характеризуется как:
текст документа (обозначается SGML построить "#PCDATA"). Текст может содержать ссылки на символы. Напомним, что они начинаются с
&
и заканчивается точкой с запятой (например,Hergé's adventures of Tintin
содержит ссылку на сущность символа для e острый символ).
это означает, что при вводе (недопустимый HTML) "начало тега" (<
) браузер исправляет его на "меньше" (<
) но когда вы вводите "начало сущности" (&
), которая is разрешено, исправление ошибок не требуется место.
вам нужно написать, что вы имеете в виду. Если вы хотите включить некоторые HTML в качестве данных, вы должны преобразовать любой символ со специальным значением в соответствующую ссылку на символ.
если данные:
<div
тогда HTML должен быть:
<textarea>&lt;div</textarea>
вы можете использовать стандартные функции для преобразования (например, в PHP htmlspecialchars
или Perl HTML:: Entities module).
NB 1: Если бы Вы были используя XHTML[2] (и действительно используя его,это не считается, если вы служите ему как text / html) тогда вы можете использовать явный блок CDATA:
<textarea><![CDATA[<div]]></textarea>
NB 2: или если браузеры реализовали HTML 4 Правильно
хорошо, но вопрос в том . почему он их расшифровывает ? предполагая, что я добавил &, сохраните textarea, ti будет сохранен
- на сервер отправляет (в браузер) данные, закодированные как HTML-код.
- на обозреватель отправляет (на сервер) данные, закодированные как application / x-www-form-urlencoded (или multipart/form-data).
поскольку браузер не отправляет данные в виде HTML, символы не представлены в виде HTML сущности.
если вы берете данные, полученные от клиента, а затем помещаете их в HTML-документ, то сначала вы должны закодировать его как HTML.
вы должны быть уверены, что это отображается в обозревателе:
<textarea name="somename">&lt;div</textarea>
по сути, это означает, что &
на <
должен быть HTML закодирован в &
. Как это сделать, будет зависеть от технологий, которые вы используете.
обновление: подумайте об этом так. Если вы хотите дисплей <div>
внутри textarea вам придется кодировать <>
иначе <div>
будет обычным HTML-элементом для браузер:
<textarea name="somename"><div></textarea>
сказав это, если вы хотите дисплей <div>
внутри textarea вам придется кодировать &
снова, потому что браузер декодирует HTML-объекты при рендеринге HTML. Это не имеет ничего общего с базой данных.
У меня была такая же проблема и я просто сделал две замены на текст из базы данных, прежде чем впустить его в текстовое поле:
myString = Replace(myString, "&", "&")
myString = Replace(myString, "<", "<")
заменить n: o 1, чтобы обмануть textarea, чтобы показать коды. заменить n: o 2: Без этой замены вы не можете показать слово "" внутри textarea (это закончится тегом textarea).
(код Asp / vbscript выше, перевести на метод замены по вашему выбору языка)
вы можете обслуживать свой DB-контент с отдельной страницы, а затем разместить его в текстовом поле с помощью JavaScript (jQuery) Ajax-call:
request = $.ajax
({
type: "GET",
url: "url-with-the-troubled-content.php",
success: function(data)
{
document.getElementById('id-of-text-area').value = data;
}
});
объяснил
http://www.endtask.net/how-to-prevent-a-textarea-element-from-decoding-html-entities/
Я нашел альтернативное решение для чтения и работы с in-browser, просто прочитайте текст элемента () с помощью jQuery, он возвращает символы в качестве символов отображения и позволяет мне писать из textarea в innerHTML div, используя свойство через html ()...