为什么HtmlEncode不对这个char进行编码?

时间:2012-06-19 15:50:24

标签: c# html encoding html-entities

这是代码:

Response.Write("asd1 X : " + HttpUtility.HtmlEncode("×"));
Response.Write("asd2 X : " + HttpUtility.HtmlEncode("✖"));

第一个是:

asd1 X : × // OK, ENCODED AS HTML ENTITIES

第二个不,只是✖:

asd2 X : ✖

那是哪种炭?另外,如果我尝试here,结果是:

asd1 X : ×
asd2 X : ✖

什么?为什么会出现这种差异?

2 个答案:

答案 0 :(得分:7)

HttpUtility.HtmlEncode(string)的MSDN页面中,您会看到以下评论:

  

它将十进制160到255(包括两者)的所有字符代码编码为其数字实体(例如 

××)与我的计算机上的× / ×相同,因此会被编码,但由于为{{1} } / ✖,它不会。

您可以使用基于所需编码的✖ the overload of HtmlEncode

答案 1 :(得分:2)

我最好的客人是并非所有字符串都有实体表示。 Heavy multiplication X只是众多没有的人之一。

为了详细说明Oded的链接,HttpUtility.HtmlEncode仅对ISO 8859-1 (Latin-1)中的字符进行编码。由于重乘法X超出此范围,因此该函数无法处理它。

如果您尝试Microsoft.Security.Application.AntiXss.HtmlEncode("✖");,则会在✖中获取HTML实体。