2009-03-20 5 views
9

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

Я попытался \ г \ п, но это просто вывешивает фактическое «\ г \ п» данные

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

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

ответ

5

Зависит от набора символов действительно, но & # 10; должна быть строка и & # 13; должен быть возврат каретки. Вы должны использовать их в атрибуте value.

+0

Если браузер поддерживает форму представления, то, скорее всего, также понимают, что ' и' 'новые линии, и если она неправильно удаляет новые строки, он будет также удалить все вхождения' 'и' '. – 0b10011

2

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

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

11

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

<input type="hidden">

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

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

+0

'style =" display: none; "' вероятно, больше succint – megaflop

+0

@daiscog Элементы формы, установленные для 'display: none' [не всегда отправляются] (http://stackoverflow.com/a/8318442/526741). Я не уверен, какие браузеры делают и не представляют поля 'display: none', но в соответствии с комментариями в этом ответе IE8 делает * not *. – 0b10011

9

В то время как новые линии (возврат каретки & линия подачи) технически разрешены в < ввода> 'ы скрытые состояния , они должны быть экранированы для совместимости со старыми браузерами. Вы можете сделать это, заменив все Возвраты каретки (\u000D или) и все фиды линий (\u000A или \n) с проприетарными строками, которые признаны вашим приложением как возврат каретки или новая линия (а также экранированы, если они присутствуют в оригинале строка).

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

Пример

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

< TextArea> Текст с \ включен
и новая строка с \ г \ п, представленными значениями </текстовым>

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

< тип входного = "скрытые" значение = "Какой-то текст с \\ включены \ г \ Nand новая линия \\ г \\ п в представленном значении">

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

ободрение

Как еще заверение, я спросил WHATWG и Ян Хиксон, редактор HTML спецификации в настоящее время, ответил:

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

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

Source