Какой символ представляет новую строку в текстовой области
Просто быстрый, но я хочу, чтобы я ловил кросс-платформенные варианты.
Мне нравится преобразовывать новые строки, введенные в текстовую область, в [запятую], так что вывод может быть представлен в одной строке, мой вопрос...
В настоящее время, отправляя из google chrome, когда я просматриваю значение, я нахожу, что он использует \r\n
для новых строк. Если я заменил \r\n
, я знаю, что он будет работать для chrome на окнах 7, но как насчет других платформ, есть ли варианты того, что другие браузеры будут вставлять в новую строку внутри текстовой области?
Ответы
Ответ 1
По спецификациям HTML браузеры должны канонизировать разрывы строк при вводе пользователя в CR LF (\r\n
), и я не думаю, что любой браузер ошибается. Ссылка: статья 17.13.4 Типы содержимого контента в спецификации HTML 4.01.
В черновиках HTML5 ситуация сложнее, поскольку они также обрабатывают процессы внутри браузера, а не только данные, которые отправляются обработчику формы на стороне сервера при отправке формы. Согласно им (и практике браузера) значение элемента textarea
существует в трех вариантах:
- необработанное значение, введенное пользователем, ненормализованное; он может содержать пару CR, LF или CR LF;
- внутреннее значение, называемое "значением API", где разрывы строк нормируются на LF (только);
- значение представления, где разрывы строк нормализуются к парам CR LF, в соответствии с интернет-соглашениями.
Ответ 2
Говоря конкретно о текстовых областях в веб-формах, для всех текстовых областей, на всех платформах, \r\n
будет работать.
Если вы используете что-либо еще, вы будете вызывать проблемы с вырезанием и вставкой на платформах Windows.
Разрывы строк будут канонизованы браузерами окон при отправке формы, но если вы отправите форму в браузер с помощью \n
linebreaks, вы обнаружите, что текст не будет копироваться и вставляться правильно, например, в блокнот и текстовое поле.
Интересно, что несмотря на то, что соглашение о конце линии Unix имеет \n
, стандарт в большинстве текстовых сетевых протоколов, включая HTTP, SMTP, POP3, IMAP и т.д., по-прежнему \r\n
. Да, это может не иметь большого смысла, но эта история и развивающиеся стандарты для вас!
Ответ 3
- Line Feed and Carriage Return
Эти объекты HTML вставят новую строку или возврат каретки внутри текстовой области.
Ответ 4
Похоже, что согласно спецификации HTML5, свойство value элемента textarea должно возвращать '\ r\n' для новой строки
Элемент value определяется как исходное значение элемента с применением следующего преобразования:
Заменить каждое появление символа "CR" (U + 000D), за которым не следует символ "LF" (U + 000A), и каждое появление "LF" (U + 000A) символ, которому предшествует символ "CR" (U + 000D), посредством двухсимвольная строка, состоящая из U + 000D CARRIAGE RETURN "CRLF" (U + 000A).
После ссылки на "значение" ясно, что он ссылается на свойство value, доступное в javascript:
Элементы управления формой имеют значение и проверочную проверку. (Последний используется только по элементам ввода.) Они используются для описания того, как пользователь взаимодействует с контролем.
Однако во всех пяти основных браузерах (с использованием Windows, 11/27/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", но если последовательность новой строки должна быть известна, в приложении может быть выполнено тестирование, подобное приведенному выше..