Html.Encode似乎只是简单地调用HttpUtility.HtmlEncode来用它们的转义序列替换一些html特定的字符。
然而,这并没有提供任何关于如何解释新行和多个空格(标记空白)的考虑。因此,我提供了一个文本区,供用户输入纯文本信息块,然后在另一个屏幕上显示该数据(使用Html.Encode),新行和间距将不会保留。
我认为有两个选择,但也许有人可以推荐更好的第三个。
一种选择是只编写一个使用HtmlEncode的静态方法,然后用<br>替换结果字符串中的新行,用 替换多个空格组
另一种选择是在我的样式表中处理white-space: pre属性--然而,当helper方法包含换行符和制表符以使页面源代码更漂亮时,我不确定这是否会产生副作用。
有没有第三个选项,比如全局标志、事件或方法覆盖,我可以用来改变html编码的方式,而不必重做html helper方法?
发布于 2009-02-07 20:46:07
HtmlEncode仅用于编码要在HTML中显示的字符。它特别不对空白字符进行编码。
我会选择您的第一个选项,并将其作为HtmlHelper的扩展方法。类似于:
public static string HtmlEncode(this HtmlHelper htmlHelper,
string text,
bool preserveWhitespace)
{
// ...
}您可以使用String.Replace()对换行符和空格进行编码(如果需要更好的匹配,也可以使用Regex.Replace )。
发布于 2012-01-18 02:39:13
使用style="white-space:pre-wrap;"对我来说很有效。每个this article。
发布于 2012-08-25 06:35:42
如果使用Razor,您可以执行以下操作:
@MvcHtmlString.Create(Html.Encode(strToEncode).Replace(Environment.NewLine, "<br />"))在您的视图中或在您的控制器中:
HttpServerUtility httpUtil = new HttpServerUtility();
MvcHtmlString encoded = httpUtil.HtmlEncode(strToEncode).Replace(Environment.NewLine, "<br />");我还没有测试控制器方法,但它应该以相同的方式工作。
https://stackoverflow.com/questions/524528
复制相似问题