Html.Encode
似乎只是简单地调用HttpUtility.HtmlEncode
用它们的转义序列替换几个html特定字符.
但是,这并未考虑如何解释新行和多个空格(标记空白).因此,我为用户提供了一个文本区域,用于输入纯文本信息块,然后在另一个屏幕上显示该数据(使用Html.Encode
),新的行和间距将不会被保留.
我认为有两种选择,但也许有人会建议更好.
一种选择是只编写一个使用HtmlEncode的静态方法,然后将结果字符串中的新行替换
为多个空格的组和
另一种选择是white-space: pre
在我的样式表中弄乱属性 - 但是我不确定当Html帮助方法包含新行和Tab键以使页面源非常漂亮时是否会产生副作用.
是否有第三个选项,如全局标志,事件或方法覆盖,我可以用来改变html编码的方式而不必重做html帮助器方法?
HtmlEncode
仅用于编码以HTML格式显示的字符.它特别不编码空白字符.
我会选择你的第一个选项,并使其成为HtmlHelper的扩展方法.就像是:
public static string HtmlEncode(this HtmlHelper htmlHelper, string text, bool preserveWhitespace) { // ... }
您可以使用String.Replace()
编码换行符和空格(或者Regex.Replace
如果您需要更好的匹配).
使用为我工作.根据这篇文章.
如果您使用剃刀,您可以:
@MvcHtmlString.Create(Html.Encode(strToEncode).Replace(Environment.NewLine, "
"))
在您的视图中,或在您的控制器中:
HttpServerUtility httpUtil = new HttpServerUtility(); MvcHtmlString encoded = httpUtil.HtmlEncode(strToEncode).Replace(Environment.NewLine, "
");
我没有测试控制器方法,但它应该以相同的方式工作.