我正在编写一个帮助方法,可以在页面上生成评论的HTML,我希望能够显示带有“< script> alert(”hello“);< / script>”的评论因为它的内容。
使用时
@HttpUtility.HtmlDecode(comment.Content)
在* .cshtml文件中,该脚本将呈现为纯文本。
但是在视图中使用此HTML帮助程序时:
@Html.PendingComment(comment)
脚本呈现为HTML并执行:
public static IHtmlString PendingComment(this HtmlHelper helper, VoidCommentPending comment)
{
var sb = new StringBuilder();
sb.Append("<p>" + HttpUtility.HtmlDecode(comment.Content) + "</p>");
return MvcHtmlString.Create(sb.ToString());
}
尝试使用“new HtmlString()”,结果相同,当我将IHtmlString的返回结果更改为字符串时,甚至段落标记都呈现为纯文本。
是否可以在HtmlHelper中混合编码和解码HTML字符串,还是应该使用不同的方法?
答案 0 :(得分:4)
好的,所以在将注释存储到数据库之前,我使用HttpUtility.Encode:
model.Content= HttpUtility.HtmlEncode(model.Content);
然后我刚从我的帮助方法中删除了解码
sb.Append("<p>" + comment.Content + "</p>");
并显示“&lt; script&gt; alert(”hello“);&lt; / script&gt;”在我的页面上作为纯文本。 问题解决了。
实际上我是“双重解码”。用HttpUtility.HtmlDecode这个内容:
<script>alert("hello");</script>
被解码为“纯文本”html,我想要,但是然后MvcHtmlString.Create正在解码它再次它得到了呈现为HTML。