什么字符代表文本区域中的新行


86

速度很快,但要确保我能适应跨平台的变化。

我喜欢将输入到文本区域的新行转换为[逗号],以便可以将输出表示为单行,这是我的问题...

目前,从谷歌浏览器发送,当我查看该值时,发现它用于\r\n换行。如果替换,\r\n我知道它将在Windows 7上适用于chrome,但其他平台又如何,其他浏览器将在文本区域内作为新行插入吗?


3
为简化起见:所有浏览器是否只发送'\ r \ n'来代表输入到文本区域的新行(我不是以编程方式创建值,而是仅由用户在其浏览器中创建的值)
Ninjanoel

Answers:


104

根据HTML规范,要求浏览器规范用户输入CR LF(\r\n)中的换行符,而且我认为任何浏览器都不会出错。参考:条款17.13.4 HTML 4.01规范中的表单内容类型

在HTML5草案中,情况更加复杂,因为它们还处理浏览器内部的进程,而不只是处理提交表单时发送到服务器端表单处理程序的数据。根据他们(和浏览器的实践),textarea元素值存在三种变体:

  1. 用户输入的未标准化的原始值;它可能包含CR,LF或CR LF对;
  2. 内部值,称为“ API值”,其中将换行符标准化为LF(仅);
  3. 提交值,其中根据Internet约定将换行符标准化为CR LF对。

4
HTML 5规范:w3.org/html/wg/drafts/html/CR/forms.html#the-textarea-elementthe 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
ComFreek 2014年

谢谢,你让我开心!我只是困惑,因为当我从文本区域在OSX /铬,浏览器CR LF发送它..发送内容
starikovs

3
另一个问题是为什么当您获得textarea的“ .length”时,它将CR LF视为一个字符,但是在服务器端进行检查(例如,使用PHP strlen)时,它将是两个字符...
starikovs

2
@ComFreek上面的链接今天已断开,使用:w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza

@starikovs,我想这已经通过内部值(称为“ API值”)得到了回答,其中将换行符标准化为LF(仅);部分。您看到的一个字符(即\n)可能是“内部API”提供的。没有参考,这只是我基于常识的假设。
user907860 '17

12

在所有平台上针对所有文本区域,专门讨论Web表单中的文本区域\r\n将是可行的。

如果您使用其他任何东西,都会在Windows平台上导致剪切和粘贴问题。

提交表单后,Windows浏览器将对换行符进行规范化,但是如果您将带有\n换行符的表单发送给浏览器,则会发现文本无法正确复制和粘贴,例如在记事本和文本区域之间。

有趣的是,尽管存在Unix的行尾约定\n,但大多数基于文本的网络协议(包括HTTP,SMTP,POP3,IMAP等)中的标准仍然是\r\n。是的,这可能没有多大意义,但这就是您的历史和不断发展的标准!


6

根据HTML5规范,看来textarea元素的value属性应该为换行符返回'\ r \ n':

应用以下转换将元素的定义为元素的原始值:

替换每次出现的“ CR”(U + 000D)字符,然后替换为“ LF”(U + 000A)字符,以及每次出现的“ LF”(U + 000A)字符,但不替换“ CR” U + 000D)字符,由两个字符组成的字符串,由U + 000D的CARRIAGE RETURN“ CRLF”(U + 000A)字符对组成。

通过链接到“值”,可以清楚地看到它引用了在javascript中访问的value属性:

表单控件具有一个值和一个检查项。(后者仅由输入元素使用。)这些元素用于描述用户如何与控件进行交互。

但是,在所有五种主要浏览器(使用Windows,2015年11月27日)中,如果将'\ r \ n'写入文本区域,则会删除'\ r'。(要测试:var e = document.createElement('textarea'); e.value ='\ r \ n'; alert(e.value =='\ n');)从v9开始,这对于IE来说是正确的。在此之前,IE返回“ \ r \ n”并将“ \ r”和“ \ n”都转换为“ \ r \ n”(这是HTML5规范)。所以...我很困惑。

为了安全起见,通常在正则表达式中使用'\ r?\ n'而不是仅使用'\ n'就足够了,但是如果必须知道换行符序列,则可以在应用程序中执行上述测试。


在同一页面上,通过JS获得的值不是API值吗?
Anshul '16

@Anshul-我明白你的意思了。最初的问题是“当前,从google chrome发送,当我查看该值时,发现它使用\ r \ n作为新行...”因此,由于它是“已发送”,因此我猜该值正在读取服务器。我以为是JS。无论如何,希望我发布的事实有用。谢谢你的评论。
barncat '16

@brancat,我认为这里的服务器语言无关紧要。HTML5规范对于2件事非常明确textarea。1.请求正文仅具有\ r \ n 2.键入时,无论您使用\ r,\ r \ n还是\ n,JS值仅具有\ n。它也与您使用IE9 +的发现相匹配。
Anshul '16

5

- Line Feed and 
 Carriage Return

这些HTML实体 将在文本区域内插入新行或回车符。


11
并没有真正回答问题
cherouvim 2014年

2
@cherouvim,我不明白您为什么对这个答案投了反对票?你读过上面的问题吗?请不要在不了解任何内容的情况下给出一些错误的评论!
Mahbub 2014年

3
@Mahbub:该答案目前有3票赞成票,因为它没有回答问题。
cherouvim 2014年

不回答问题。
Mike Devenney 2015年

1
好吧,我一直在寻找什么
 意思是这个答案对我有帮助,所以请不要感到难过,所有信息都是有益的信息,可以帮助人们随机地
进来
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.