Можно ли добавить разрывы строк в поле textarea, сохраняя при этом его допустимость в XHTML 1.0?
-
09-09-2019 - |
Вопрос
Редактировать: Перечитав свой пост, я думаю, что мне немного неясно, в чем проблема.Позвольте мне попытаться перефразировать это:
Пользователи могут оставлять комментарии на моем сайте, используя поле textarea в форме.Должна быть возможность добавить разрывы строк в комментарий, используя <br />
.Затем комментарий сохраняется в виде строки в базе данных mysql (экранируется для обеспечения безопасности), а позже извлекается из базы данных и отображается на сайте.Обычные разрывы строк не распознаются при отображении комментария.
Пользователи могут редактировать свои комментарии, и в этом случае исходный комментарий отображается в поле textarea, подлежащем изменению (см. Изображение ниже).Проблема в том, что если есть какие-либо <br />
в настоящее время код недействителен как XHTML 1.0 (см. Сообщение об ошибке ниже).
Могу ли я сделать код допустимым, используя любой другой тип разрыва строки?Как указано в комментариях, обычные переносы строк в сочетании с xml:space="сохранить" не работают (переносы строк отображаются в поле textarea, но не тогда, когда комментарий отображается как обычный текст на сайте).
Оригинальный вопрос:
У меня есть веб-форма, которая включает поле textarea для оставления комментариев, и я хочу, чтобы она могла добавлять разрывы строк с помощью <br />
.Ниже приведен простой пример:
(источник: shipit.se)
Он работает так, как задумано, однако он не проверяется как переходный XHTML 1.0 при использовании службы проверки W3C.Это ошибка, которую я получаю:
- Строка ошибки 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<br />line break</textarea>
Все, что вводится пользователем, которое затем повторно воспроизводится в <textarea>
на новой странице должны быть закодированы (т.е. использовать объекты для &
, "
, '
, <
, и >
).
Если хотите отобразить запись пользователя:
Тест
<br />
разрыв строки
...как...
Тест
разрыв строки
...в пределах другой текстовой области, затем вам нужно будет проанализировать то, что было введено в оригинал <textarea>
и замените введенный пользователем <br />
s с обычными разрывами строк. Смотрите ответ Лусеро.
Другие советы
Вы пробовали добавить xml:space="preserve"
приписывать и использовать просто обычные разрывы строк?
Почему бы не использовать обычные перерывы на линии?Они работают просто отлично.
Если ты хочешь <br />
чтобы появиться, вам нужно закодировать эти объекты:
<br />
я просто сделал это и работает.
<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>