2013-05-16 121 views
1

我有一個使用HighCharts圖表的系統,似乎在顯示某些UTF字符時出現問題,IE中的顯示效果不錯,但Chrome和Firefox不能正確顯示字符。HighCharts Axis標籤編碼

在VB代碼中,我們正在構建一個javascript函數來標記條形圖。

sb.AppendLine(" xAxis: {") 
sb.AppendLine("  title: {") 
sb.AppendFormat(" text: '{0}'", JSEncode(Server.HtmlEncode("Planificación Mes Período"))) 
sb.AppendLine("  },") 

在IE它正確地顯示爲 Planificación的MesPeríodo

但在鉻和Firefox它顯示#

Planificaci#243之前,如下面&; N的Mes每#237 ; odo

我們需要HtmlEncode的文本,以防止任何額外的HTML運行由於安全原因,我研究過使用RegEx刪除任何HTML標籤而不是HTML編碼,但它沒有像我們想要的那樣工作。

我只是困惑,爲什麼它在IE中可以正常工作,但在Chrome和Firefox中無法正常工作。

+0

你有沒有在你的站點設置字符集爲UTF-8?簡單的例子工作正常:http://jsfiddle.net/3bQne/101/ –

+0

我們已經改變它不HtmlEncode的文字。 斜體和粗體標籤適用於文本,但鏈接和按鈕不會出現,這對我們來說安全性更好。 – user2390470

+0

你不需要HtmlEncode JSON。你也不需要轉義序列。只需使用原始的UTF-8字符就可以看到它!您唯一需要做的就是將內容聲明爲UTF-8。 – mwhs

回答

0

其實,我有一個相關的問題,偶然發現你的問題在這裏。原因在於IE正確解釋了HTML編碼數據,因爲HighCharts使用HTML在IE中呈現圖表。在FireFox和Chrome中,它使用SVG呈現它,因此HTML編碼數據不會被解釋爲HTML,例如,我有一個問題,其中一個數據標籤包含&符號('&')。如果我HTMLEncode我的標籤,'&'在字符串編碼爲&和IE完美呈現。 Chrome/FF不...字面呈現'&'。如果我刪除HTML編碼,則Chrome/FF顯示'&',但IE不會呈現標籤,因爲它將'&'解釋爲HTML編碼字符的起始處。

對不起,這不是一個答案本身,但希望有記錄的地方!

0

在RFC 4627第3章,它說:

JSON內容應以Unicode編碼的默認編碼是UTF-8

==>這意味着,你不」無論如何,當你使用UTF-8時(在你的Java IDE中?),你需要編碼任何東西。

並進一步向下它說:

JSON可以使用UTF-8,UTF-16,或UTF-32當JSON 寫入UTF-8,JSON是8位兼容來表示當。 JSON是 使用UTF-16或UTF-32,內容傳輸編碼 的二進制文件必須使用。

如果遇到特殊字符的問題,同時從服務器Highcharts transfering數據到客戶端,然後嘗試檢查你的http頭。它應該是這樣的:

content-type: application/json; charset=utf-8 

否則請確保用於配置highcharts JS文件保存爲UTF-8。

如果你還覺得你必須編碼字符然後應用RFC的第2.5章的需要:

如果字符是在基本多文種平面(U + 0000到U + FFFF),那麼它可能可以表示爲六個字符的序列:反向固體角,其後是小寫字母u,隨後是四個十六進制數字,用於編碼角色的代碼點。十六進制字母A到F可以是大寫或小寫。因此,例如,只包含一個反向立體角色字符的字符串可以表示爲「\ u005C」。

http://www.ietf.org/rfc/rfc4627.txt

看的RFC,這是完美的JSON:

sb.AppendFormat("text: 'Planificación Mes Período'");