XHTML и код внутри текстовых областей

На моем сайте, где для отправки используется текстовое поле, у меня есть код, который может выглядеть примерно так:

<textarea><p>text</p></textarea>

При проверке (XHTML 1.0 Transitional) возникает эта ошибка,

line 88 column 50 - Error: document type does not allow element "p" here

Если это недопустимый метод, чего ожидать? Я мог бы найти обходной путь с помощью события onload JavaScript, но это кажется ненужным. Несмотря на это, это не влияет на результат, но я бы предпочел, чтобы мой сайт прошел проверку.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Валидация полей ввода для базовой формы React
Валидация полей ввода для базовой формы React
В одном из моих проектов MERN Stack есть форма с именем, фамилией, контактным номером, адресом, электронной почтой, датой рождения, номером NIC, весом...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
5
0
3 684
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

есть причина, по которой вы пытаетесь поместить <p> в <textarea>? как вы выяснили, это недействительно. если он предназначен для отображения (т. е. для отображения кода), его следует перевести:

<textarea>&lt;p&gt;text&lt;/p&gt;</textarea>

Помимо проблем с проверкой, разрешение на отображение произвольных тегов (которые неправильно закодированы, как указано выше) может стать серьезной проблемой для безопасности. Очень важно убедиться, что любой вводимый пользователем ввод был должным образом продезинфицирован перед отображением.

По какой-то причине я думал, что объекты HTML не будут отображаться в текстовой области (тупой). Преобразование HTML-сущностей в символы, а затем все они, кажется, сделали это :)

Derek H 13.10.2008 01:49

Вы можете опустить теги в текстовой области, а когда вам нужны новые строки, используйте \ n В противном случае используйте &lt;p&gt; и &lt;/p&gt; вместо ваших тегов.

Вы можете использовать функцию onload для замены начальных и конечных тегов содержимого текстового поля.

eg: replace < > with &lt; &gt;

<textarea cols = "" rows = "">&lt;p&gt;text&lt;/p&gt;</textarea>

<p> текст </p>

Правильно ли я думаю, что вы пытаетесь создать редактор WYSIWYG, такой как TinyMCE? Похоже, что большинство из них использует объекты HTML в textarea и конвертирует их в HTML с помощью JavaScript.

Подойдет ли вам раздел CDATA?

<textarea><![CDATA[
    <p>Blah</p>
]]></textarea>

вы можете использовать эту функцию для опубликованных данных

function clean_data($value) {
    if (get_magic_quotes_gpc()) { $value = stripslashes($value); }
    $value = addslashes(htmlentities(trim($value)));
    $value = str_replace("\'", "&#39;", $value);
    $value = str_replace("'", "&#39;", $value);
    $value = str_replace(":", "&#58;", $value);
    return $value;
}

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