这个问题困扰了我一百万年......每当我创建一个带有textarea的网站,允许多行(例如用户个人资料的“Bio”)时,我总是写下以下的偏执代码:
// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
那么,如果<textarea name="Bio"></textarea>
有多行,浏览器会发送什么?
答案 0 :(得分:47)
HTTP和MIME规范指定标题行必须以\ r \ n结尾,但它们不清楚(有些人认为它们不清楚是否清楚)关于如何处理TEXTAREA的内容。 (例如,请参阅HTML工作组中有关该问题的this thread。)
以下是有关邮件标题的HTTP / 1.1规范的引用:
消息头字段的行终止符是序列CRLF。但是,我们建议应用程序在解析此类标头时,将单个LF识别为行终止符并忽略前导CR。
我认为这是一个很好的策略:严格要求你所生产的东西,但要接受自由。您应该假设您将收到各种线路终结器。 (请注意,除了CRLF和LF之外,Mac OS-9仅使用CR,并且仍然有一些围绕。Unicode standard(第5.8节)指定了应该被识别为的各种字符序列行终止符;有一个列表here。)
答案 1 :(得分:29)
如果
<textarea></textarea>
有多行,浏览器会发送什么内容?
所有现代浏览器都会发送CRLF(\r\n
)。然而,这并不是令人满意的标准化,所以我绝对认为值得对所有多行输入文本的换行进行标准化。
当通过JavaScript读取值而不是直接从表单提交时,浏览器行为会有所不同。 IE和Opera返回带有CRLF的字符串; Firefox和WebKit返回LF。因此,使用JavaScript / XMLHttpRequest帮助提交的任何表单都可能以任何一种形式出现。