gpt4 book ai didi

asp.net-mvc-3 - 禁用 ASP.NET-MVC3 中 unicode 字符的编码

转载 作者:行者123 更新时间:2023-12-02 17:39:22 26 4
gpt4 key购买 nike

在我的网站上,每个文本都以 UTF-8 格式提供。

由于现在每个浏览器都支持 unicode 字符,我想按原样使用它们。

asp.net 框架非常有用,它可以用数字字符引用(例如 á)替换任何 unicode。供引用检查:http://en.wikipedia.org/wiki/Unicode_and_HTML#HTML_document_characters

当然,这样网页就可以在最古老的 Netscape 中正确呈现,但是例如 Google 分析电子商务模块在理解这些特殊编码的字符时遇到一些困难。

有没有办法全局禁用数字字符引用编码?

例如我想用 Razor 写:

<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 字符的自动编码感到满意。这不是我想要禁用的。

我不想重构所有代码,并且我认为应该有一个“全局开关”来禁用在 razor 中使用字符串参数时的这种行为。有办法做到这一点吗?

我还可以明确禁止数字字符引用,例如使用 new MvcHtmlString(myString, some parameters) 之类的内容吗?

最佳答案

恐怕您无法关闭此编码功能。这个“不错”的功能是由WebUtility.HtmlEncode提供的。并且您无法影响编码。

但是,从 .net 4.0 开始,您可以通过创建一个继承自 HttpEncoder 的类来自定义编码行为。并在 web.cofig HttpRuntimeSection.EncoderType 中配置它。但您需要实现自己的自定义编码逻辑。

幸运的是.net 4.5附带了一个新的HttpEncoder它编码了不好的东西(如 <script> ),但是正确处理了名为 AntiXssEncoder 的 Unicode 字符。

所以你只需要将其添加到你的 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 Protection Library

这是一篇如何设置的文章:Using AntiXss As The Default Encoder For ASP.NET (尽管它可能已经过时)

关于asp.net-mvc-3 - 禁用 ASP.NET-MVC3 中 unicode 字符的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com