这是代码:
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 : ✖
什么?为什么会出现这种差异?
答案 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实体。