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
该HTTP和MIME规范指定标题行必须以\ r \n结束,但他们并不清楚(有人会说,这是不明确的,如果他们都清楚)有关如何与textarea的内容做.(例如,请参阅HTML工作组中有关该问题的此主题.)
以下是有关邮件头的HTTP/1.1规范的引用:
消息头字段的行终止符是序列CRLF.但是,我们建议应用程序在解析此类头时,将单个LF识别为行终止符并忽略前导CR.
我认为这是一个很好的策略:严格要求你所生产的东西,但要接受自由.您应该假设您将收到各种线路终结器.(请注意,除了CRLF和LF之外,Mac OS-9仅使用CR,并且仍然有一些.Unicode标准(第5.8节)规定了广泛的字符序列,应该被识别为行终止符;有它们的列表在这里.)
bob*_*nce 29
<textarea></textarea>
如果它有多行,浏览器会发送什么?
所有现代浏览器都发送CRLF(\r\n
).然而,这并不是令人满意的标准化,所以我绝对认为值得对所有多行输入文本的换行进行标准化.
当通过JavaScript读取值而不是直接从表单提交时,浏览器行为会有所不同.IE和Opera返回带有CRLF的字符串; Firefox和WebKit返回LF.因此,使用JavaScript/XMLHttpRequest帮助提交的任何表单都可能以任何一种形式出现.