我使用asp.net核心并希望通过razor语法显示html字符串。
我试过了:
@{
string content = Model.Content.Replace("<script>", "<script>")
.Replace("</script>", "</script>");
}
@Html.Raw(System.Net.WebUtility.HtmlDecode(content))
输入:
<b>foo</b><script>alert('bar')</script>
但仍调用脚本标记中的alert
函数。如何避免它(只有脚本标签)?
答案 0 :(得分:0)
您可以使用convert.ToString
函数将html.raw
数据转换为string
格式
@Convert.ToString(@Html.Raw(System.Net.WebUtility.HtmlDecode(content)))
这样就不会调用警报功能。
答案 1 :(得分:0)
您需要在解码后执行替换。就目前而言,您只是解码HTML实体替换,然后再次将它们作为普通标记。
@{
var content = Model.Content.Replace("<script>", "<script>")
.Replace("</script>", "</script>");
}
@Html.Raw(content)
虽然它值得,但我认为你实际上根本不需要解码。它并没有真正做任何事情。换句话说,这在功能上是等价的:
Html.Raw
如果脚本标记已经编码,那么当您通过window.confirm
转储它们时,它们将保持这种状态。