首页 文章

编写/输出未转义的HTML字符串

提问于
浏览
398

我已经在数据库表中保存了安全/清理的HTML .

如何在Razor视图中写出此HTML内容?

它总是将 < 和&符号等字符转义为 &amp; .

6 回答

  • 10

    假设您的内容位于名为 mystring 的字符串中...

    您可以使用:

    @Html.Raw(mystring)
    

    或者,您可以将字符串转换为HtmlString或在模型中实现 IHtmlString 或直接内联的任何其他类型,并使用常规 @

    @{ var myHtmlString = new HtmlString(mystring);}
    @myHtmlString
    
  • 2

    在ASP.NET MVC 3中你应该这样做:

    // Say you have a bit of HTML like this in your controller:
    ViewBag.Stuff = "<li>Menu</li>"
    //  Then you can do this in your view:
    @MvcHtmlString.Create(ViewBag.Stuff)
    
  • 73

    您可以使用

    @{ WriteLiteral("html string"); }
    
  • 4

    有时使用原始html可能会很棘手 . 主要是因为XSS漏洞 . 如果这是一个问题,但你仍然想使用原始html,你可以编码可怕的部分 .

    @Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
    

    结果是

    (<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)
    
  • 604

    您可以将您的字符串放入控制器中的viewdata,如下所示:

    ViewData["string"] = DBstring;
    

    然后在视图中调用viewdata,如下所示:

    @Html.Raw(ViewData["string"].ToString())
    
  • 55

    除了使用Dommer建议的 @MvcHtmlString.Create(ViewBag.Stuff) 之外,我建议你也使用AntiXSS库作为建议phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

    它编码几乎所有可能的XSS攻击字符串 .

相关问题