只是快速一个,但要确保我能捕捉到跨平台的变化。
我喜欢将输入到文本区域的新行转换为[逗号],以便输出可以在一行上表示,我的问题......
目前,从谷歌浏览器发送,当我查看值时,我发现它\r\n
用于新行。如果我更换\r\n
,我知道它适用于 Windows 7 上的 chrome,但其他平台呢,其他浏览器将作为新行插入文本区域内的内容是否有变化?
根据 HTML 规范,浏览器需要将用户输入中的换行符规范化为 CR LF ( \r\n
),我认为任何浏览器都不会出错。参考:HTML 4.01 规范中的第 17.13.4 条表单内容类型。
在 HTML5 草稿中,情况更加复杂,因为它们还处理浏览器内部的进程,而不仅仅是在提交表单时发送到服务器端表单处理程序的数据。根据他们(和浏览器实践),textarea
元素值存在于三种变体中:
专门讨论 Web 表单中的文本区域,适用于所有平台上的所有文本区域,都\r\n
可以。
如果您使用其他任何东西,您将在 Windows 平台上导致剪切和粘贴问题。
当表单提交时,换行符将被 Windows 浏览器规范化,但是如果您将表单发送到带有\n
换行符的浏览器,您会发现文本不会在例如记事本和 textarea 之间正确复制和粘贴。
有趣的是,尽管有 Unix 行尾约定\n
,但大多数基于文本的网络协议(包括 HTTP、SMTP、POP3、IMAP 等)的标准仍然是\r\n
. 是的,它可能没有多大意义,但这对你来说是历史和不断发展的标准!
- Line Feed and Carriage Return
这些HTML 实体 将在文本区域内插入新行或回车。
看来,根据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' 就足够了,但如果必须知道换行符序列,则可以在应用程序中执行上述测试。