程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php數組編碼轉換示例詳解

php數組編碼轉換示例詳解

編輯:關於PHP編程

     需要達到的效果是GBK數組轉換成utf-8數組傳給json_encode函數,下面使用詳細介紹轉換方法

    因為一些特殊字符的顯示效果的原因不得不把習慣的utf-8工程改成了GBK,由於使用了ajax技術,又涉及到了老問題——編碼轉換。一些表單驗證需要返回json數據,php的json_encode函數只支持utf-8編碼,無奈只得iconv了,需要達到的效果是GBK數組轉換成utf-8數組傳給json_encode函數。   最開始的思路,將數組序列化後用iconv函數轉換編碼,之後再反序列化,代碼如下:    代碼如下: unserialize(iconv('gbk','utf-8',serialize($array)));       得到的結果是空白,後來想起來配置文件裡設置了默認編碼 ini_set('default_charset', 'gbk');   這樣用gbk反序列化utf-8的字符串肯定不好用了,此處在序列化和反序列化之間加個ini_set('default_charset', 'utf-8'); 應該也是可以的,但這麼弄總覺得有點別扭,因為是全局的編碼設置,很容易導致其他地方的編碼問題,比如數據庫操作。那麼換個思路,用構建數組原型的序列化方法,借助var_export函數,最終函數如下:   代碼如下: function array_iconv($in_charset,$out_charset,$arr){           return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));   }      原理很簡單 var_export設置第二個參數為true,返回數組原型字符串,將字符串轉換為utf-8編碼,之後再用eval來執行返回(類似匿名函數?),至此完美解決問題。   後續:後來在網上搜了下資料,看有沒有更好的方法,找到的都大同小異,都是利用遞歸調用iconv的方式,如果數組元素過多或者維數多一些,性能上肯定不怎麼樣了,更好的是原生代碼的方式,不需要考慮是N維數組還是關聯數組,一切都已經自動完成,保證數組轉換前後數據一致。從代碼的長短以及循環和原生方法的比較上,相信大家已經有了選擇。  
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved