html输出中的特殊字符

时间:2012-02-26 13:18:34

标签: c# asp.net asp.net-mvc

我希望直接打印像'ø'这样的字符,但在源'ø'中显示为ø

如果输出通过Html.Encode(),则无法呈现正确的字符,但ø

配置中的

<globalization
  fileEncoding="utf-8"
  requestEncoding="utf-8"
  responseEncoding="utf-8"
  culture="nb-NO"
  uiCulture="nb-NO"
/>

来源:

<li><%: Html.ActionLink("Støvletter", "ListProducts", "Tag", new { tag = "Stovletter" }, null)%></li>

输出:

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li>

但输出应该如下:

<li><a href="/Tag/Stovletter">Støvletter</a></li>

3 个答案:

答案 0 :(得分:3)

这可能不是您正在寻找的答案,但它仍然很有趣。

如果您查看HttpEncoder源代码,则会使用custom HtmlEncoders代替默认WebUtility.HtmlEncode

我玩过,发现Microsoft的HtmlEncoder called AntiXSS正确编码了这些字符。

我使用Nuget安装了它:

PM> Install-Package AntiXSS 

然后更新我的web.config

<system.web>
    <httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, 
AntiXssLibrary" />
    ....
</system.web>

正常输出和Html.ActionLinks似乎都有效。

答案 1 :(得分:1)

AFAIK这是不可能的,除非你推出自己的自定义HTML编码例程(我绝对建议你反对)。

生成的HTML是正确的,并且该字符在客户端浏览器上正确显示。 HTML旨在由程序(Web浏览器)读取,以便将其呈现为人类可读的形式,而不是人类。

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li>

是一个完全有效的HTML,将在客户端浏览器上显示如下:

enter image description here

答案 2 :(得分:1)

您可以尝试使用<%=而非html编码<%:

创建输出

(我在对你的评论做出积极评论后发布此信息)