浏览器发送“\ r \ n”或“\ n”还是依赖于浏览器?

这个问题已经困扰了我一百万年…每当我创build一个允许多行(如用户的个人资料的“生物”)的textarea的网站,我总是最终编写以下偏执的代码:

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

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

HTTP和MIME规范指定标题行必须以\ r \ n结尾,但它们不清楚(有些人会认为不清楚是否清楚)如何处理TEXTAREA的内容。 (例如,请参阅HTML工作组关于此问题的此线程 。)

下面是HTTP / 1.1规范中关于消息头的引用:

消息头字段的行终止符是序列CRLF。 但是,我们build议应用程序在parsing这些头文件时将一个LF识别为一个行终止符,并忽略前导CR。

我认为这是一个很好的策略:严格要求生产,但是要接受自由。 你应该假设你会收到各种各样的行结束符。 (注意,除了CRLF和LF之外,Mac OS-9单独使用了CR,并且还有其他几种。Unicode标准 (5.8节)规定了一系列应该被识别为行终止符的字符序列。这里有一个列表。)

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

所有现代浏览器发送CRLF( \r\n )。 然而,这并不是一个令人满意的标准化的东西,所以我认为值得将所有多行input文本的换行标准化。

当通过JavaScript读取值而不是直接从表单提交时,浏览器行为会有所不同。 IE和Opera返回带有CRLF的string; Firefox和WebKit返回LF。 因此,任何获得JavaScript / XMLHttpRequest帮助提交的表单都可能以任何forms出现。