Хотя новые строки (возврат каретки и перевод строки) технически разрешены в скрытом состоянии, их следует экранировать для совместимости со старыми браузерами. Это можно сделать, заменив все возвраты каретки (\u000D
или \r
) и все переводы строк (\u000A
или \n
) собственными строками, которые в вашем приложении распознаются как возврат каретки или новая строка (и также сбежал, если присутствует в исходной строке).
Просто символьные сущности здесь не работают, потому что несоответствующие браузеры могут знать, что
и
являются новыми строками и удаляют их из значения.
Пример
Например, в PHP, если бы вы echo
передавали значение в текстовое поле, вы бы включали символы новой строки (и неэкранированную строку).
Однако в PHP, если бы вы echo
указали значение атрибута value тега , вы бы экранировали новые строки с вашими собственными строками (например, \r
и \n
) и избегайте любых экземпляров ваших собственных строк в переданном значении.
Затем, перед использованием значения в другом месте (вставка в базу данных, отправка по электронной почте и т. Д.), При необходимости обязательно удалите отправленное значение.
Заверение
В качестве дополнительного заверения я спросил WHATWG, и Ян Хиксон, редактор спецификации HTML, ответил:
bfrohs Вопрос о - Разрешены ли перевод строки и возврат каретки в значении? Они специально запрещены в состоянии «Текст» и «Поиск», но не упоминается о состоянии «Скрыто». И, если нет, есть ли приемлемое HTML-решение для хранения данных формы из текстовой области?
Hixie да, они разрешены // iirc // по унаследованным причинам, вы можете их избежать, хотя некоторые браузеры их нормализуют // я забываю, исправили мы это или нет // в спецификация
Источник