禁用的Unicode字符编码在ASP.NET的MVC3(Disable encoding of un

2019-07-18 21:53发布

在我的网站上的每个文本担任UTF-8。

由于目前所有浏览器都支持Unicode字符,我想使用它们原样。

的asp.net框架是通过用数字字符引用替换任何Unicode非常有益的,喜欢á 。 仅供参考检查: http://en.wikipedia.org/wiki/Unicode_and_HTML#HTML_document_characters

当然,这样的网页正确呈现在最古老的Netscape的可能,但例如谷歌分析电子商务模块有一些麻烦了解这些特殊编码字符。

有没有一种方法,以全局禁用数字字符引用编码?

比如我想在剃刀写的:

<span class="title">@ViewBag.Title</span>

我想这显示在输出:

<span class="title">Számítástechnika</span>

不是这个:

<span class="title">Sz&#225;m&#237;t&#225;stechnika</span>

我并不想禁用HTML编码,因此Html.Raw是没有办法了,例如我不能保证@ ViewBag.Title不会的内容是这样的:

<span class="title"><script>alert('injected hahahah');</script></span>

所以我含量的特殊HTML字符的自动编码。 这不是我希望禁用的。

我不想重组所有的代码,我认为应该有一个“全局开关”禁止这种行为在剃须刀使用字符串参数。 有没有办法做到这一点?

此外,可以显式的东西,如禁止数字字符引用,例如new MvcHtmlString(myString, some parameters)

Answer 1:

恐怕你不能把这种编码功能关闭。 这个“好”的功能是由提供WebUtility.HtmlEncode ,你不能影响编码。

然而,随着开始.NET 4.0,你可以自定义编码行为,与创建从继承的类HttpEncoder并在web.cofig配置它HttpRuntimeSection.EncoderType 。 但是,你需要实现自己的自定义编码逻辑。

幸运的是,.NET 4.5附带了一个新的HttpEncoder编码坏的东西(比如<script>但是处理Unicode字符正确调用AntiXssEncoder

所以,你只需要在你的web.config补充一点:

<system.web>
    <httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder, 
                             System.Web, Version=4.0.0.0, Culture=neutral, 
                             PublicKeyToken=b03f5f7f11d50a3a"/>    
</system.web>

如果您还不是在.NET 4.5,你可以实现你的AntiXssEncoder的帮助下的Microsoft Web防护库

下面是一个文章如何设置它: 使用AntiXss作为默认的编码器,用于ASP.NET (尽管它可能是过时的)



Answer 2:

你也可以使用@Html.Raw mvc.This的方法是有用的,你不希望在全球范围内,有时这样做对已经建成的项目。

@Html.Raw(@ViewBag.Title)


文章来源: Disable encoding of unicode characters in ASP.NET-MVC3