php數(shù)組編碼轉(zhuǎn)換示例詳解
因為一些特殊字符的顯示效果的原因不得不把習(xí)慣的utf-8工程改成了GBK,由于使用了ajax技術(shù),又涉及到了老問題——編碼轉(zhuǎn)換。一些表單驗證需要返回json數(shù)據(jù),php的json_encode函數(shù)只支持utf-8編碼,無奈只得iconv了,需要達(dá)到的效果是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)有了選擇。
相關(guān)文章
tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法
這篇文章主要介紹了tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法,結(jié)合實例形式簡單分析了mongoDB數(shù)據(jù)庫及thinkPHP5連接、查詢MongoDB數(shù)據(jù)庫的基本操作技巧,需要的朋友可以參考下2018-01-01Mac系統(tǒng)下搭建Nginx+php-fpm實例講解
這篇文章主要介紹了Mac系統(tǒng)下搭建Nginx+php-fpm實例講解,不懂mac系統(tǒng)下如何搭建php環(huán)境的小伙伴可以跟隨小編一起來學(xué)習(xí)研究下吧2020-12-12php使用ICQ網(wǎng)關(guān)發(fā)送手機(jī)短信
php發(fā)送手機(jī)短信實例代碼。2013-10-10php獲取目標(biāo)函數(shù)執(zhí)行時間示例
這篇文章主要介紹了php獲取目標(biāo)函數(shù)執(zhí)行時間示例,需要的朋友可以參考下2014-03-03laravel實現(xiàn)分頁樣式替換示例代碼(增加首、尾頁)
這篇文章主要給大家介紹了關(guān)于laravel實現(xiàn)分頁樣式替換的相關(guān)資料,實現(xiàn)了增加首、尾頁的功能,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-09-09TP5(thinkPHP5)框架mongodb擴(kuò)展安裝及特殊操作示例
這篇文章主要介紹了TP5(thinkPHP5)框架mongodb擴(kuò)展安裝及特殊操作,結(jié)合實例形式分析了MongoDB擴(kuò)展的基本安裝、配置、模型操作以及使用Push操作實現(xiàn)的數(shù)據(jù)添加、更新等方法,需要的朋友可以參考下2018-09-09PHP isset()與empty()的使用區(qū)別詳解
本文主要介紹了PHP isset()與empty()的使用區(qū)別。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02