2012-06-19 41 views
4

這是代碼:爲什麼HtmlEncode不編碼這個字符?

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

字符是UTF-8還是Windows 1251? –

+0

呃...但實體可能是普遍的,不管關於字符集,我錯了嗎? – markzzz

+0

貌似Unicode字符[2716](http://www.fileformat.info/info/unicode/char/2716/index.htm) – Oded

回答

2

我最好的客人是不是所有的字符串有一個實體表示。 Heavy multiplication X只是其中的一個。

要精心俄德的鏈接,HttpUtility.HtmlEncode只有在ISO 8859-1 (Latin-1)編碼字符。由於重乘X超出此範圍,該函數不處理它。

如果您嘗試Microsoft.Security.Application.AntiXss.HtmlEncode("✖");,您將獲得✖中的HTML實體。

7

在爲HttpUtility.HtmlEncode(string)的MSDN頁面,你會發現此評論:

它編碼的十進制160的所有字符代碼255(包括兩端),以它們的數字實體(如 

××)與我的電腦上的×/×相同,所以會得到編碼,但由於✖/✖,它不會。

您可以使用the overload of HtmlEncode,基於想要的編碼需要TextWriter

+0

使用重載方法不會生成HTML實體。它只是使用輸出大X.(TextWriter的TW =新的StreamWriter(@ 「C:\ TEMP \ test.txt的」)){HttpUtility.HtmlEncode( 「✖」,TW);} –

+0

@RayCheng - 你爲什麼要期待數字實體引用?你爲什麼需要它? – Oded

+0

我認爲OP的意圖是試圖獲取HTML實體。但是對於'HttpUtility.HtmlEncode',由於限制,對特定字符不可能。所以重載的方法仍然不能提供想要的結果。 –