PHP數(shù)組編碼gbk與utf8互相轉(zhuǎn)換的兩種方法
一、利用var_export(), eval()方法
/** * 將含有GBK的中文數(shù)組轉(zhuǎn)為utf-8 * * @param array $arr 數(shù)組 * @param string $in_charset 原字符串編碼 * @param string $out_charset 輸出的字符串編碼 * @return array */ function array_iconv($arr, $in_charset="gbk", $out_charset="utf-8") { $ret = eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';')); return $ret; // 這里轉(zhuǎn)碼之后可以輸出json // return json_encode($ret); }
原理很簡(jiǎn)單 var_export
設(shè)置第二個(gè)參數(shù)為true
,返回?cái)?shù)組原型字符串,將字符串轉(zhuǎn)換為utf-8編碼,之后再用eval
來(lái)執(zhí)行返回(類似匿名函數(shù)?),至此完美解決問(wèn)題。
eval() 函數(shù)小結(jié):
條件:eval()
函數(shù)把字符串按照 PHP 代碼來(lái)計(jì)算。該字符串必須是合法的 PHP 代碼,且必須以分號(hào)結(jié)尾。
如果沒(méi)有在代碼字符串中調(diào)用 return
語(yǔ)句,則返回 NULL
。如果代碼中存在解析錯(cuò)誤,則 eval()
函數(shù)返回 false。
$a ="hello"; $res = eval("return $a;"); print_r($res); // 在賦值時(shí)必須用反斜杠對(duì)$標(biāo)示符進(jìn)行轉(zhuǎn)義 eval("\$str = \"$str\";"); echo $str;
二、利用遞歸將數(shù)組轉(zhuǎn)碼
/** * UTF-8編碼 GBK編碼相互轉(zhuǎn)換/(支持?jǐn)?shù)組) * * @param array $str 字符串,支持?jǐn)?shù)組傳遞 * @param string $in_charset 原字符串編碼 * @param string $out_charset 輸出的字符串編碼 * @return array */ function array_iconv($str, $in_charset="gbk", $out_charset="utf-8") { if(is_array($str)) { foreach($str as $k => $v) { $str[$k] = array_iconv($v); } return $str; } else { if(is_string($str)) { // return iconv('UTF-8', 'GBK//IGNORE', $str); return mb_convert_encoding($str, $out_charset, $in_charset); } else { return $str; } } }
總結(jié)
PHP將數(shù)組編碼gbk和utf-8相互轉(zhuǎn)換的內(nèi)容到這就基本結(jié)束了,文章介紹的很詳細(xì),具有一定的參考價(jià)值,希望這篇文章對(duì)大家的學(xué)習(xí)和工作能帶來(lái)一定的幫助。
相關(guān)文章
用PHP調(diào)用Oracle存儲(chǔ)過(guò)程的方法
php程序訪問(wèn)數(shù)據(jù)庫(kù),完全可以使用存儲(chǔ)過(guò)程,有人認(rèn)為使用存儲(chǔ)過(guò)程便于維護(hù)。不過(guò)仁者見(jiàn)仁,智者見(jiàn)智,在這個(gè)問(wèn)題上,偶認(rèn)為使用存儲(chǔ)過(guò)程意味著必須要dba和開(kāi)發(fā)人員更緊密配合,如果其中一方更變,則顯然難以維護(hù)。2008-09-09解析數(shù)組非數(shù)字鍵名引號(hào)的必要性
以下是對(duì)數(shù)組非數(shù)字鍵名引號(hào)的必要性進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08php+Ajax處理xml與json格式數(shù)據(jù)的方法示例
這篇文章主要介紹了php+Ajax處理xml與json格式數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了ajax處理xml格式數(shù)據(jù)及json格式數(shù)據(jù)相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-03-03php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫(kù)的兩種方式
這篇文章主要介紹了php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫(kù)的兩種方式,需要的朋友可以參考下2014-04-04PHP實(shí)現(xiàn)的只保留字符串首尾字符功能示例【隱藏部分字符串】
這篇文章主要介紹了PHP實(shí)現(xiàn)的只保留字符串首尾字符功能,結(jié)合實(shí)例形式分析了php隱藏部分字符串相關(guān)的字符串遍歷、截取相關(guān)操作技巧,需要的朋友可以參考下2019-03-03PHP 批量更新網(wǎng)頁(yè)內(nèi)容實(shí)現(xiàn)代碼
lost63原創(chuàng)的,批量替換內(nèi)容的php代碼2010-01-01PHP中preg_match正則匹配中的/u、/i、/s含義
這篇文章主要介紹了PHP中preg_match正則匹配中的/u、/i、/s含義,本文分別講解了這三個(gè)參數(shù)的含義,需要的朋友可以參考下2015-04-04