php5.2 Json不能正確處理中文、GB編碼的解決方法
更新時(shí)間:2014年03月28日 17:49:27 作者:
json_encode對(duì)中文的處理是有問(wèn)題,不能處理GB編碼,所有的GB編碼都會(huì)替換成空字符,下面有個(gè)不錯(cuò)的解決方法,大家可以參考下
php5.2新增的json功能是非常受歡迎的,但是經(jīng)過(guò)測(cè)試發(fā)現(xiàn),
json_encode對(duì)中文的處理是有問(wèn)題的,
1.不能處理GB編碼,所有的GB編碼都會(huì)替換成空字符.
2.utf8編碼的中文被編碼成unicode編碼,相當(dāng)于javascript的escape函數(shù)處理的結(jié)果.
/*
為了能正確使用json,首先我們就應(yīng)該在編碼上采用utf8編碼,然后再對(duì)json_encode的返回結(jié)果稍加處理就可以得到正確的結(jié)果了。
我寫(xiě)了一個(gè)簡(jiǎn)單的類,將這兩個(gè)函數(shù)包裝了一下,
**/
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);
}
}
//使用的時(shí)候
Json::encode($code);
Json::decode($code);
/**這樣可以正確處理utf8編碼的中文了。
PS:對(duì)于GB編碼的中文,我們可以在編碼時(shí)先轉(zhuǎn)成UTF8編碼,再進(jìn)行編碼,解碼的時(shí)候再進(jìn)行一個(gè)utf8 -> gb的轉(zhuǎn)換就可以了。
另外一般json_encode的結(jié)果我們是返回到客戶端來(lái)使用,我們其實(shí)還可以用javascript的unescape函數(shù)來(lái)對(duì)unicode編碼的中文進(jìn)行解碼,從而還原成正確的中文。
或者用:$title = mb_convert_encoding($title, 'HTML-ENTITIES', $this->_outCharset);//任意編碼下都正常顯示
********/
json_encode對(duì)中文的處理是有問(wèn)題的,
1.不能處理GB編碼,所有的GB編碼都會(huì)替換成空字符.
2.utf8編碼的中文被編碼成unicode編碼,相當(dāng)于javascript的escape函數(shù)處理的結(jié)果.
復(fù)制代碼 代碼如下:
/*
為了能正確使用json,首先我們就應(yīng)該在編碼上采用utf8編碼,然后再對(duì)json_encode的返回結(jié)果稍加處理就可以得到正確的結(jié)果了。
我寫(xiě)了一個(gè)簡(jiǎn)單的類,將這兩個(gè)函數(shù)包裝了一下,
**/
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);
}
}
//使用的時(shí)候
Json::encode($code);
Json::decode($code);
/**這樣可以正確處理utf8編碼的中文了。
PS:對(duì)于GB編碼的中文,我們可以在編碼時(shí)先轉(zhuǎn)成UTF8編碼,再進(jìn)行編碼,解碼的時(shí)候再進(jìn)行一個(gè)utf8 -> gb的轉(zhuǎn)換就可以了。
另外一般json_encode的結(jié)果我們是返回到客戶端來(lái)使用,我們其實(shí)還可以用javascript的unescape函數(shù)來(lái)對(duì)unicode編碼的中文進(jìn)行解碼,從而還原成正確的中文。
或者用:$title = mb_convert_encoding($title, 'HTML-ENTITIES', $this->_outCharset);//任意編碼下都正常顯示
********/
您可能感興趣的文章:
- 淺談php和js中json的編碼和解碼
- php中json_encode中文編碼問(wèn)題分析
- PHP學(xué)習(xí)散記_編碼(json_encode 中文不顯示)
- PHP中遇到BOM、<feff>編碼導(dǎo)致json_decode函數(shù)無(wú)法解析問(wèn)題
- php使用json_encode對(duì)變量json編碼
- php json中文編碼為null的解決辦法
- java解析php函數(shù)json_encode unicode 編碼問(wèn)題
- php實(shí)現(xiàn)json編碼的方法
- PHP自定義遞歸函數(shù)實(shí)現(xiàn)數(shù)組轉(zhuǎn)JSON功能【支持GBK編碼】
- PHP 實(shí)現(xiàn) JSON 數(shù)據(jù)的編碼和解碼操作詳解
相關(guān)文章
PHP高級(jí)編程實(shí)例:編寫(xiě)守護(hù)進(jìn)程
這篇文章主要介紹了PHP高級(jí)編程實(shí)例:編寫(xiě)守護(hù)進(jìn)程,守護(hù)進(jìn)程是脫離于終端并且在后臺(tái)運(yùn)行的進(jìn)程,本文講解使用PHP編寫(xiě)守護(hù)進(jìn)程,并給出了代碼實(shí)例,需要的朋友可以參考下2014-09-09PHP實(shí)現(xiàn)抓取迅雷VIP賬號(hào)的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)抓取迅雷VIP賬號(hào)的方法,實(shí)例分析了php基于采集類Snoopy實(shí)現(xiàn)頁(yè)面抓取及正則匹配的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07PHP 數(shù)據(jù)庫(kù) 常見(jiàn)問(wèn)題小結(jié)
揭露 PHP 應(yīng)用程序中出現(xiàn)的五個(gè)常見(jiàn)數(shù)據(jù)庫(kù)問(wèn)題 —— 包括數(shù)據(jù)庫(kù)模式設(shè)計(jì)、數(shù)據(jù)庫(kù)訪問(wèn)和使用數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯代碼 —— 以及它們的解決方案。2009-06-06