Можно ли добавить разрывы строк в поле textarea, сохраняя его действительным XHTML 1.0? - PullRequest
3 голосов
/ 16 апреля 2009

РЕДАКТИРОВАТЬ: Перечитав мой пост, я думаю, что мне немного неясно, в чем проблема. Позвольте мне попытаться перефразировать это:

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

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

Могу ли я сделать код действительным, используя любой другой тип переноса строки? Как указано в комментариях, обычные разрывы строк в сочетании с xml: space = "preserve" не работают (разрывы строк отображаются в поле 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» раздел (где «ссылка» и «мета» не допускаются; следовательно, сообщается об ошибке).

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

Ответы [ 4 ]

2 голосов
/ 16 апреля 2009

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

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

&lt;br /&gt;
2 голосов
/ 16 апреля 2009

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

1 голос
/ 05 марта 2013

Я только что сделал это и работает.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
1 голос
/ 16 апреля 2009

Из DTD :

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

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

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

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

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

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

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

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

..., как ...

Test
перевод строки

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

...