Опубликовать новую строку/возврат каретки как значение скрытого поля

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

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

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

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


person Community    schedule 20.03.2009    source источник


Ответы (4)


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

person Shea    schedule 20.03.2009
comment
Если браузер поддерживает отправку формы, он, скорее всего, также поймет, что &#10; и &#13; являются новыми строками, и если он неправильно удалит новые строки, он также удалит все вхождения &#10; и &#13;. - person 0b10011; 18.11.2011

Вместо того, чтобы использовать

<input type="hidden">

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

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

person orinetz    schedule 09.05.2010
comment
style="display:none;", вероятно, более лаконичен - person daiscog; 03.07.2014
comment
Элементы формы @daiscog со значением display:none не всегда отправляются. Я не уверен, какие браузеры отправляют и не отправляют поля display:none, но, согласно комментариям под этим ответом, IE8 нет. - person 0b10011; 05.08.2014

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

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

Пример

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

‹textarea›Некоторый текст с \included
и новая строка с \r\n в качестве отправленного значения‹/textarea›

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

‹тип ввода=скрытое значение=Некоторый текст с включенным \\\r\nи новой строкой\\r\\n в качестве отправленного значения›

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

Уверенность

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

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

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

Источник

person 0b10011    schedule 17.11.2011

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

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

person Stephen P    schedule 20.03.2009