快一点,但想确保我抓住跨平台变体。
我喜欢将输入文本区域的新行转换为[逗号],以便输出可以在一行中表示,我的问题......
目前,从谷歌浏览器发送,当我查看该值时,我发现它使用\r\n
表示新行。如果我替换\r\n
我知道它适用于Windows 7上的chrome,但是对于其他平台,其他浏览器在文本区域内作为新行插入的内容是否有变化?
答案 0 :(得分:88)
根据HTML规范,浏览器需要规范化用户输入到CR LF(\r\n
)的换行符,我不认为任何浏览器都会出错。参考:HTML 4.01规范中的第17.13.4节Form content types。
在HTML5草案中,情况更复杂,因为它们还处理浏览器内部的进程,而不仅仅是在提交表单时发送到服务器端表单处理程序的数据。根据它们(和浏览器实践),textarea
元素值存在三种变体:
答案 1 :(得分:10)
特别谈论网络表单中的textareas,对于所有平台上的所有textareas,\r\n
都可以。{/ p>
如果您使用其他任何内容,则会导致Windows平台上的剪切和粘贴问题。
在提交表单时,换行符将由Windows浏览器进行规范化,但如果您将表单发送到具有\n
换行符的浏览器,您会发现文本之间无法正确复制和粘贴示例记事本和textarea。
有趣的是,尽管Unix行结束约为\n
,但大多数基于文本的网络协议(包括HTTP,SMTP,POP3,IMAP等)的标准仍然是\r\n
。是的,它可能没有多大意义,但这是你的历史和不断发展的标准!
答案 2 :(得分:6)
- Line Feed and Carriage Return
这些HTML entities会在文本区域内插入新行或回车符。
答案 3 :(得分:5)
根据HTML5 spec,似乎textarea元素的value属性应返回' \ r \ n'换行:
元素value被定义为元素的原始值 应用以下转换:
替换每次出现的" CR" (U + 000D)字符未跟随 a" LF" (U + 000A)字符,以及每次出现的" LF" (U + 000A) 字符前面没有" CR" (U + 000D)字符,由a 由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& #39;);)自从v9以来,IE就是这样。在此之前,IE正在回归' \ r \ n'转换' \ r'和' \ n'到' \ r \ n' (这是HTML5规范)。所以......我很困惑。
为了安全起见,通常使用' \ r?\ n'在正则表达式中而不仅仅是' \ n',但如果必须知道换行符序列,则可以在应用程序中执行上述测试。