我从一开始就一直在为 ASP.NET 编写代码,今天我遇到了以前从未见过的东西。通常,我通过期待“\r\n”来寻找 C# 中的换行符(例如,当从文本区域在 ASP.NET 中发布时)。现在我正在使用 MVC 框架,从 textarea 传过来的文本只是用“\n”表示换行符。
老式的 TextBox 控件中是否发生了使换行符正常化的事情?由于 MVC 只是按原样使用表单数据,这是否正常?很想得到一些见解。
我从一开始就一直在为 ASP.NET 编写代码,今天我遇到了以前从未见过的东西。通常,我通过期待“\r\n”来寻找 C# 中的换行符(例如,当从文本区域在 ASP.NET 中发布时)。现在我正在使用 MVC 框架,从 textarea 传过来的文本只是用“\n”表示换行符。
老式的 TextBox 控件中是否发生了使换行符正常化的事情?由于 MVC 只是按原样使用表单数据,这是否正常?很想得到一些见解。
我观察到实际的换行顺序因浏览器而异。
如果您在页面上有一个多行文本区域并且该页面已提交,则:
IE 返回 "\r\n" 表示换行。在这种情况下,FF 返回“\n”。
我在 2006 年底的某个地方对其进行了测试,所以现在可能会有所不同。
我不相信它与 WebForms 与 MVC 有任何关系。两者都只是处理提交的输入并将其原样返回给您。
如果您希望以某种方式处理和替换这些字符,那么按从多到少的顺序进行操作是有意义的:
string userText = form["Text"];
userText = userText.Replace ("\r\n", "<br/>").Replace ("\r", "<br/>");
\n 是 *nix 风格系统上的换行符。\r\n 是 Windows 特定的行尾行为。
如果您正在检查行尾并将您的界面暴露给非 Windows 环境,请确保不仅要检查 \r\n 还要单独检查 \n。
有关更多背景信息,请查看 Wikipedia 上的Newline文章。
我正在使用Environment.NewLine:
string userText = form["Text"];
userText = userText.Replace (Environment.NewLine, "<br />")