浏览器是发送"\ r \n"还是"\n"还是取决于浏览器?

Tim*_*uri 100 html browser web-standards line-breaks

这个问题困扰了我一百万年......每当我创建一个包含textarea的网站,允许多行(例如用户个人资料的"Bio")时,我总是写下以下偏执代码:

// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
Run Code Online (Sandbox Code Playgroud)

那么,<textarea name="Bio"></textarea>如果它有多行,浏览器会发送什么?

Ted*_*opp 49

HTTPMIME规范指定标题行必须以\ r \n结束,但他们并不清楚(有人会说,这是不明确的,如果他们都清楚)有关如何与textarea的内容做.(例如,请参阅HTML工作组中有关该问题的此主题.)

以下是有关邮件头的HTTP/1.1规范的引用:

消息头字段的行终止符是序列CRLF.但是,我们建议应用程序在解析此类头时,将单个LF识别为行终止符并忽略前导CR.

我认为这是一个很好的策略:严格要求你所生产的东西,但要接受自由.您应该假设您将收到各种线路终结器.(请注意,除了CRLF和LF之外,Mac OS-9仅使用CR,并且仍然有一些.Unicode标准(第5.8节)规定了广泛的字符序列,应该被识别为行终止符;有它们的列表在这里.)

  • 我不相信这些规格指明了textarea产生的东西. (6认同)
  • @Will:再次阅读原始问题.它特别询问浏览器如何编码`textarea`的内容(这是规范,或者至少是Ted引用它的部分,不受约束). (2认同)
  • @Mark-你是对的。在各个论坛中,都有关于该问题的无休止的辩论。(请参阅HTML工作组的[此线程来自1995年](http://ksi.cpsc.ucalgary.ca/archives/HTML-WG/html-wg-95q1.messages/0035.html)。 (2认同)
  • 这个答案需要编辑.它开始引用HTTP规范,但这与textareas无关. (2认同)
  • 我做了,但答案仍然是引用HTTP,这是一个错误的规范,强调如果提到.您包含的引号专门针对"消息标题字段",但`textarea`s不作为消息标题字段发送.`textarea`s被编码到不同的消息体中. (2认同)

bob*_*nce 29

<textarea></textarea>如果它有多行,浏览器会发送什么?

所有现代浏览器都发送CRLF(\r\n).然而,这并不是令人满意的标准化,所以我绝对认为值得对所有多行输入文本的换行进行标准化.

当通过JavaScript读取值而不是直接从表单提交时,浏览器行为会有所不同.IE和Opera返回带有CRLF的字符串; Firefox和WebKit返回LF.因此,使用JavaScript/XMLHttpRequest帮助提交的任何表单都可能以任何一种形式出现.