五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > PHP數(shù)組編碼轉(zhuǎn)換(UTF8/GBK/json_encode)

PHP數(shù)組編碼轉(zhuǎn)換(UTF8/GBK/json_encode)

文章來源:365jz.com     點擊數(shù):556    更新時間:2015-12-15 22:23   參與評論
因為一些特殊字符的顯示效果的原因不得不把習(xí)慣的utf-8工程改成了GBK,由于使用了ajax技術(shù),又涉及到了老問題——編碼轉(zhuǎn)換。

一些表單驗證需要返回json數(shù)據(jù),php的json_encode函數(shù)只支持utf-8編碼,無奈只得iconv了,需要達到的效果是GBK數(shù)組轉(zhuǎn)換成utf-8數(shù)組傳給json_encode函數(shù)。

最開始的思路,將數(shù)組序列化后用iconv函數(shù)轉(zhuǎn)換編碼,之后再反序列化,代碼如下:

unserialize(iconv('gbk','utf-8',serialize($array))); 

得到的結(jié)果是空白,后來想起來配置文件里設(shè)置了默認(rèn)編碼 ini_set('default_charset', 'gbk');   這樣用gbk反序列化utf-8的字符串肯定不好用了,此處在序列化和反序列化之間加個ini_set('default_charset', 'utf-8'); 應(yīng)該也是可以的,但這么弄總覺得有點別扭,因為是全局的編碼設(shè)置,很容易導(dǎo)致其他地方的編碼問題,比如數(shù)據(jù)庫操作。那么換個思路,用構(gòu)建數(shù)組原型的序列化方法,借助var_export函數(shù),最終函數(shù)如下:

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
}  

原理很簡單 var_export設(shè)置第二個參數(shù)為true,返回數(shù)組原型字符串,將字符串轉(zhuǎn)換為utf-8編碼,之后再用eval來執(zhí)行返回(類似匿名函數(shù)?),至此完美解決問題。

后續(xù):后來在網(wǎng)上搜了下資料,看有沒有更好的方法,找到的都大同小異,都是利用遞歸調(diào)用iconv的方式,如果數(shù)組元素過多或者維數(shù)多一些,性能上肯定不怎么樣了,更好的是原生代碼的方式,不需要考慮是N維數(shù)組還是關(guān)聯(lián)數(shù)組,一切都已經(jīng)自動完成,保證數(shù)組轉(zhuǎn)換前后數(shù)據(jù)一致。從代碼的長短以及循環(huán)和原生方法的比較上,相信大家已經(jīng)有了選擇。


 

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇

發(fā)表評論 (556人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號