HTML.Encode但保留换行符

BZi*_*ink 37 asp.net-mvc html-encode asp.net-mvc-3

我将用户输入带入文本区域,存储并最终将其显示回用户.

在我的视图(剃刀)中我想做这样的事情......

@Message.Replace("\n", "</br>")
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为默认情况下Razor Html编码.这很棒,但我想换线.

如果我这样做,我会遇到XSS问题.

@Html.Raw(Message.Replace("\n", "</br>"))
Run Code Online (Sandbox Code Playgroud)

处理这种情况的正确方法是什么?

Ric*_*der 45

使用HttpUtility.HtmlEncode然后执行替换.

@Html.Raw(HttpUtility.HtmlEncode(Message).Replace("\n", "<br/>"))
Run Code Online (Sandbox Code Playgroud)

  • 对于 asp.net 核心,我必须在进行替换时查找转义字符,因此下面将同时查找回车和换行符 `@Html.Raw(Html.Encode(output).Replace("&#13; xA;", "&lt;br/&gt;"))` (3认同)

Ton*_*res 13

如果您发现自己不止一次使用它,将它包装在自定义HtmlHelper中可能会有所帮助,如下所示:

namespace Helpers
{
    public static class ExtensionMethods
    {
        public static IHtmlString PreserveNewLines(this HtmlHelper htmlHelper, string message)
        {
            return message == null ? null : htmlHelper.Raw(htmlHelper.Encode(message).Replace("\n", "<br/>"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您就可以像这样使用自定义HtmlHelper:

@Html.PreserveNewLines(Message)
Run Code Online (Sandbox Code Playgroud)

请记住,您需要在Helpers名称空间中添加一个使用,以使HtmlHelper可用.


Eri*_*sch 9

您可以对邮件进行编码,然后以原始方式显示.就像是:

@Html.Raw(Server.HtmlEncode(Message).Replace("\n", "<br/>"))
Run Code Online (Sandbox Code Playgroud)