Просто быстрый, но хочу убедиться, что ловлю кроссплатформенные варианты.
Мне нравится преобразовывать новые строки, введенные в текстовую область, в [запятую], чтобы вывод можно было представить в одной строке, мой вопрос ...
В настоящее время при отправке из Google Chrome, когда я просматриваю значение, я обнаруживаю, что оно используется \r\n
для новых строк. Если я заменю, \r\n
я знаю, что он будет работать для Chrome на Windows 7, но как насчет других платформ, есть ли варианты того, что другие браузеры будут вставлять как новую строку в текстовую область?
Ответы:
Согласно спецификациям HTML, браузеры должны канонизировать разрывы строк при вводе пользователем в CR LF (
\r\n
), и я не думаю, что какой-либо браузер ошибается. Ссылка: пункт 17.13.4 Типы содержимого форм в спецификации HTML 4.01.В черновиках HTML5 ситуация более сложная, поскольку они также имеют дело с процессами внутри браузера, а не только с данными, которые отправляются обработчику формы на стороне сервера при отправке формы. Согласно им (и практике браузера)
textarea
значение элемента существует в трех вариантах:источник
the user agent should allow the user to edit, insert, and remove text, and to insert and remove line breaks in the form of "LF" (U+000A) characters
.\n
), вероятно, предоставляется «внутренним API». Никаких ссылок, это всего лишь мои предположения, основанные на здравом смысле.Говоря конкретно о текстовых полях в веб-формах, для всех текстовых полей на всех платформах
\r\n
будет работать.Если вы используете что-то еще, вы вызовете проблемы с вырезанием и вставкой на платформах Windows.
Разрывы строк будут канонизированы браузерами Windows при отправке формы, но если вы отправите форму в браузер с разрывами строк
\n
, вы обнаружите, что текст не будет правильно копироваться и вставляться, например, между блокнотом и текстовым полем.Интересно, что, несмотря на то, что в Unix соглашение о конце строки является
\n
стандартом для большинства текстовых сетевых протоколов, включая HTTP, SMTP, POP3, IMAP и так далее\r\n
. Да, возможно, в этом нет большого смысла, но для вас это история и новые стандарты!источник
Кажется, что, согласно спецификации HTML5 , свойство value элемента textarea должно возвращать '\ r \ n' для новой строки:
После ссылки на 'value' становится ясно, что это относится к свойству value, доступному в javascript:
Однако во всех пяти основных браузерах (использующих Windows, 27.11.2015), если '\ r \ n' записывается в текстовое поле, '\ r' удаляется. (Для проверки: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Это верно для IE, начиная с версии v9. До этого IE возвращал '\ r \ n' и конвертировал '\ r' и '\ n' в '\ r \ n' (что является спецификацией HTML5). Итак ... я в замешательстве.
В целях безопасности обычно достаточно использовать '\ r? \ N' в регулярных выражениях вместо просто '\ n', но если последовательность новой строки должна быть известна, в приложении можно выполнить тест, подобный приведенному выше.
источник
textarea
. 1. В теле запроса будет только \ r \ n. 2. В JS-значении будет только \ n, независимо от того, используете ли вы при вводе \ r, \ r \ n или \ n. Это также соответствует вашему открытию с IE9 +. - Line Feed and Carriage Return
Эти HTML-объекты вставят новую строку или возврат каретки внутри текстовой области.
источник