端午和上個周末做的微博應用送大禮中設計到ajax返回json的數據格式中,我沒有完全使用PHP默認的json_encode來編碼,因為這樣編碼出來的是unicode編碼的,也就是\u的編碼,雖然unicode編碼可以在不同的頁面中編碼不會出現亂碼問題。但是一個漢字編碼成unicode會變成\u+4個字符,這樣在字符長度上要比漢字多。
因為我的php文件和html聲明中都是使用的UTF-8,不會出現編碼亂碼問題,所以就放棄了直接使用json_encode的方法,而是把漢字先urlencode然後再使用json_encode,json_encode之後再次使用urldecode來解碼,這樣編碼出來的json數組中的漢字就不會出現unicode編碼了~
代碼如下
//默認為:{"test":"\u6211\u662f\u6d4b\u8bd5"}
$array = array(
'test'=>urlencode("我是測試")
);
$array = json_encode($array);
echo urldecode($array);
//{"test":"我是測試"}
此舉主要是為了節省傳輸字符數,因為我的送大禮默認會引入幾百個好友信息,對於數據的流量還是比較大的~所以采用漢字傳輸要比unicode字符編碼傳輸要節省帶寬~而且處理好了頁面編碼問題,不會出現亂碼現象。
json_encode出null的問題
如果文檔編碼或者字符串編碼(例如UTF-8抓取了一個GBK頁面)為非UTF-8,就會出現json_encode編碼失敗的問題,變現為輸出漢字為null。
解決的方法就是在json_encode之前用iconv函數將漢字轉為UTF-8。
TBCompressor的壓縮文件的編碼
TBCompressor是淘寶UED團隊修改的YUICompressor,可以支持將js、css中的漢字轉為unicode編碼,如果js文件中出現的漢字太多,壓縮之後反而會出現體積變大的問題,例如一個js是全國省市縣的地名數組,這樣就要通過修改TBCompressor配置來解決~
我們可以通過修改TBCompressor的cmd文件,不使用native2ascii就可以解決,這樣還可以在沒裝JDK只有JRE的電腦上使用TBCompressor。當然如果你要壓縮的js、css文件是UTF-8編碼的就需要修改一下TBCompressor中的charset為UTF-8。.
說著說著扯遠了,打完收工~
原文:http://www.js8.in/697.html