網路城邦

上一篇 回創作列表 下一篇   字體:
php5.2 Json不能正確處理中文的解決辦法
2013/05/31 09:37:51瀏覽670|回應0|推薦1

hp5.2 Json不能正確處理中文的解決辦法

2009-05-30    文章來源:互聯網    瀏覽次數:2499

php5.2新增的json功能是非常受歡迎的,但是經過測試發現,

json_encode對中文的處理是有問題的,

1.不能處理GB編碼,所有的GB編碼都會替換成空字符.

2.utf8編碼的中文被編碼成unicode編碼,相當於javascript的escape函數處理的結果.


為了能正確使用json,首先我們就應該在編碼上採用utf8編碼,然後再對json_encode的返回結果稍加處理就可以得到正確的結果了。

我寫了一個簡單的類,將這兩個函數包裝了一下,


class Json{  

 public static function encode($str){  

 $code = json_encode($str);  

 return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);  

 }  

 

 public static function decode($str){  

 return json_decode($str);  

 }  

}


使用的時候


Json::encode($code);  

Json::decode($code);

這樣可以正確處理utf8編碼的中文了。


PS:對於GB編碼的中文,我們可以在編碼時先轉成UTF8編碼,再進行編碼,解碼的時候再進行一個utf8 -> gb的轉換就可以了。

另外一般json_encode的結果我們是返回到客戶端來使用,我們其實還可以用javascript的unescape函數來對unicode編碼的中文進行解碼,從而還原成正確的中文。


或者用:$title = mb_convert_encoding($title, 'HTML-ENTITIES', $this->_outCharset);//任意編碼下都正常顯示

( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=maxmas&aid=7698507