【问题标题】:What character represents a new line in a text area什么字符代表文本区域中的新行
【发布时间】:2012-12-22 10:20:23
【问题描述】:

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

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

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

【问题讨论】:

  • 简化:所有浏览器是否只发送 '\r\n' 来表示输入到文本区域的新行(我不是以编程方式创建值,它只由用户在他们的浏览器中)

标签: html textarea newline


【解决方案1】:

根据 HTML 规范,浏览器必须将用户输入中的换行符规范化为 CR LF (\r\n),我认为任何浏览器都不会出错。参考:HTML 4.01 规范中的第 17.13.4 Form content types 条。

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

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

【讨论】:

  • 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
  • 谢谢,你让我开心!我只是感到困惑,因为当我从 osx/chrome 上的 textarea 发送内容时,浏览器使用 CR LF 发送它..
  • 另一个问题是为什么当你得到 textarea 的 ".length" 时,它只将 CR LF 视为一个字符,但是当你在服务器端检查时(例如,使用 PHP strlen)它会是两个字符...
  • @ComFreek 上面的链接今天失效了,使用:w3.org/TR/html5/forms.html#the-textarea-element
  • @starikovs,我想这已经用 内部值(称为“API 值”)来回答,其中换行符被规范化为 LF(仅); 部分。您所看到的一个字符(即\n)可能是“内部API”提供的。没有参考,这只是我根据常识的假设。
【解决方案2】:

专门讨论网络表单中的文本区域,对于所有文本区域,在所有平台上,\r\n 都可以。

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

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

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

【讨论】:

    【解决方案3】:

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

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

    替换每次出现的“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' 就足够了,但是如果必须知道换行符序列,则可以在应用程序中执行上述测试.

    【讨论】:

    • 同一个页面,通过JS获取的值不就叫API值吗?
    • @Anshul - 我明白你的意思。最初的问题是“目前,从谷歌浏览器发送,当我查看值时,我发现它使用 \r\n 换行......”所以,因为它正在“发送”,我猜这个值正在被读取服务器。我认为它与JS有关。无论如何,希望我发布的事实有一些用处。感谢您的评论。
    • @brancat,我认为服务器语言在这里应该无关紧要。对于textarea,HTML5 规范在两件事上非常清楚。 1. Request body 将只有 \r\n 2. JS 值将只有 \n,无论您在键入时使用的是 \r、\r\n 还是 \n。它也与您在 IE9+ 中的发现相匹配。
    【解决方案4】:
    
- Line Feed and 
 Carriage Return
    

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

    【讨论】:

    • 并没有真正回答问题
    • @cherouvim,我不明白你为什么对这个答案投了反对票?你读过上面的问题吗?请不要在没有理解任何内容的情况下给出一些错误的评论答案!
    • @Mahbub:这个答案目前有 3 票反对,因为它没有回答问题。
    • 不回答问题。
    • 好吧,我在找什么 意思是这个答案对我有帮助,所以不要难过,所有信息都是很好的信息,并且可以随机帮助人们:)
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多