Можно ли добавить разрывы строк в поле textarea, сохраняя при этом его допустимость в XHTML 1.0?

StackOverflow https://stackoverflow.com/questions/755944

Вопрос

Редактировать: Перечитав свой пост, я думаю, что мне немного неясно, в чем проблема.Позвольте мне попытаться перефразировать это:

Пользователи могут оставлять комментарии на моем сайте, используя поле textarea в форме.Должна быть возможность добавить разрывы строк в комментарий, используя <br />.Затем комментарий сохраняется в виде строки в базе данных mysql (экранируется для обеспечения безопасности), а позже извлекается из базы данных и отображается на сайте.Обычные разрывы строк не распознаются при отображении комментария.

Пользователи могут редактировать свои комментарии, и в этом случае исходный комментарий отображается в поле textarea, подлежащем изменению (см. Изображение ниже).Проблема в том, что если есть какие-либо <br /> в настоящее время код недействителен как XHTML 1.0 (см. Сообщение об ошибке ниже).

Могу ли я сделать код допустимым, используя любой другой тип разрыва строки?Как указано в комментариях, обычные переносы строк в сочетании с xml:space="сохранить" не работают (переносы строк отображаются в поле textarea, но не тогда, когда комментарий отображается как обычный текст на сайте).


Оригинальный вопрос:

У меня есть веб-форма, которая включает поле textarea для оставления комментариев, и я хочу, чтобы она могла добавлять разрывы строк с помощью <br />.Ниже приведен простой пример:

screen dump
(источник: shipit.se)

Он работает так, как задумано, однако он не проверяется как переходный XHTML 1.0 при использовании службы проверки W3C.Это ошибка, которую я получаю:

  1. Строка ошибки 90, столбец 1587:тип документа здесь не допускает элемента "br"

…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha

Элемент, названный выше, был найден в контексте, где он запрещен.Это может означать, что у вас неправильно вложенные элементы - такие как элемент "style" в разделе "body" вместо внутри "head" - или два элемента, которые перекрываются (что недопустимо).

Одной из распространенных причин этой ошибки является использование синтаксиса XHTML в HTML-документах.Из-за правил HTML для неявно закрытых элементов эта ошибка может создавать каскадные эффекты.Например, использование "самозакрывающихся" тегов XHTML для "meta" и "link" в разделе "head" HTML-документа может привести к тому, что анализатор выведет конец раздела "head" и начало раздела "body" (где "link" и "meta" запрещены;отсюда и сообщение об ошибке).

Есть ли способ сделать разрывы строк допустимым кодом, или мне нужно найти обходной путь (например,использование определенных тегов для разрывов строк в поле textarea, а затем замена их на <br /> позже, при отображении комментария)?

Это было полезно?

Решение

Из DTD:

<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

В XHTML-коде вашей страницы есть <textarea> может содержать только текст (#PCDATA), и вы не можете вложить какие-либо элементы XHTML в <textarea>.

Ваши вопросы, кажется, показывают две разные вещи.На изображении показано "<br />" записано в <textarea>, в то время как сообщение от средства проверки W3C ссылается на <br /> элемент, записанный в XHTML вашей страницы в <textarea> элемент.

В первом случае, имея "Test<br />line break" отображение пользователю в текстовой области выполняется с помощью соответствующих объектов, точно так же, как Альткогнито написал:

<textarea>Test&lt;br /&gt;line break</textarea>

Все, что вводится пользователем, которое затем повторно воспроизводится в <textarea> на новой странице должны быть закодированы (т.е. использовать объекты для &, ", ', <, и >).

Если хотите отобразить запись пользователя:

Тест<br />разрыв строки

...как...

Тест
разрыв строки

...в пределах другой текстовой области, затем вам нужно будет проанализировать то, что было введено в оригинал <textarea> и замените введенный пользователем <br />s с обычными разрывами строк. Смотрите ответ Лусеро.

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

Вы пробовали добавить xml:space="preserve" приписывать и использовать просто обычные разрывы строк?

Почему бы не использовать обычные перерывы на линии?Они работают просто отлично.

Если ты хочешь <br /> чтобы появиться, вам нужно закодировать эти объекты:

&lt;br /&gt;

я просто сделал это и работает.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top