94

只是快速一个,但要确保我能捕捉到跨平台的变化。

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

目前,从谷歌浏览器发送,当我查看值时,我发现它\r\n用于新行。如果我更换\r\n,我知道它适用于 Windows 7 上的 chrome,但其他平台呢,其他浏览器将作为新行插入文本区域内的内容是否有变化?

4

4 回答 4

113

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

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

  1. 用户输入的原始值,未标准化;它可能包含 CR、LF 或 CR LF 对;
  2. 内部值,称为“API 值”,其中换行符标准化为 LF(仅);
  3. 提交值,其中换行符被标准化为 CR LF 对,根据 Internet 约定。
于 2013-01-08T14:37:48.147 回答
12

专门讨论 Web 表单中的文本区域,适用于所有平台上的所有文本区域,都\r\n可以。

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

当表单提交时,换行符将被 Windows 浏览器规范化,但是如果您将表单发送到带有\n换行符的浏览器,您会发现文本不会在例如记事本和 textarea 之间正确复制和粘贴。

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

于 2013-01-08T14:29:24.997 回答
6

- Line Feed and 
 Carriage Return

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

于 2014-03-22T19:39:11.863 回答
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) 字符对组成的两个字符的字符串。

在指向“value”的链接之后,可以清楚地看出它是指在 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' 就足够了,但如果必须知道换行符序列,则可以在应用程序中执行上述测试。

于 2015-11-27T16:28:57.053 回答