Опубликовать перевод строки / возврата каретки как скрытое значение поля - PullRequest
10 голосов
/ 20 марта 2009

Мне нужно опубликовать многострочные данные через скрытое поле. Данные будут просмотрены в текстовой области после публикации. Как я могу опубликовать перевод новой строки / возврата каретки в HTML-форму?

Я пытался \ r \ n, но он просто публикует фактические данные \ r \ n

<input type="hidden" name="multiline_data" value="line one\r\nline two" />

Есть ли способ сделать это?

Ответы [ 4 ]

11 голосов
/ 09 мая 2010

Вместо использования

<input type="hidden">

Попробуйте использовать

<textarea style="visibility:hidden;position:absolute;">

9 голосов
/ 18 ноября 2011

Хотя новые строки (возврат каретки и перевод строки) технически разрешены в скрытом состоянии, их следует экранировать для совместимости со старыми браузерами. Это можно сделать, заменив все возвраты каретки (\u000D или \r) и все переводы строк (\u000A или \n) собственными строками, которые в вашем приложении распознаются как возврат каретки или новая строка (и также сбежал, если присутствует в исходной строке).

Просто символьные сущности здесь не работают, потому что несоответствующие браузеры могут знать, что &#10; и &#13; являются новыми строками и удаляют их из значения.

Пример

Например, в PHP, если бы вы echo передавали значение в текстовое поле, вы бы включали символы новой строки (и неэкранированную строку).

Однако в PHP, если бы вы echo указали значение атрибута value тега , вы бы экранировали новые строки с вашими собственными строками (например, \r и \n) и избегайте любых экземпляров ваших собственных строк в переданном значении.

Затем, перед использованием значения в другом месте (вставка в базу данных, отправка по электронной почте и т. Д.), При необходимости обязательно удалите отправленное значение.

Заверение

В качестве дополнительного заверения я спросил WHATWG, и Ян Хиксон, редактор спецификации HTML, ответил:

bfrohs Вопрос о - Разрешены ли перевод строки и возврат каретки в значении? Они специально запрещены в состоянии «Текст» и «Поиск», но не упоминается о состоянии «Скрыто». И, если нет, есть ли приемлемое HTML-решение для хранения данных формы из текстовой области?

Hixie да, они разрешены // iirc // по унаследованным причинам, вы можете их избежать, хотя некоторые браузеры их нормализуют // я забываю, исправили мы это или нет // в спецификация

Источник

5 голосов
/ 20 марта 2009

Зависит от набора символов, но на самом деле должен быть перевод строки и должен быть возврат каретки. Вы должны иметь возможность использовать их в атрибуте значения.

2 голосов
/ 21 марта 2009

Вы не говорите, для чего это нужно или какую технологию вы используете, но вам нужно знать, что вы не можете доверять скрытому полю, чтобы оно оставалось со значением = "строка первая строка вторая ", потому что враждебный пользователь может вмешаться до того, как его отправят обратно в POST. Поскольку вы помещаете значение в

Когда вы записываете значение в скрытое поле и читаете его обратно, обычно лучше просто сохранить его на сервере в качестве атрибута сеанса, или потока страниц, или того, что ваша среда предоставляет для подобных вещей.

...