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