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í)行返回(類(lèi)似匿名函數(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實(shí)現(xiàn)xml數(shù)據(jù)轉(zhuǎn)數(shù)組兩種方式
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)xml數(shù)據(jù)轉(zhuǎn)數(shù)組兩種方式的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以參考下2023-11-11
PHP實(shí)現(xiàn)的多維數(shù)組去重操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組去重操作,結(jié)合實(shí)例形式分析了php序列化json字符串及數(shù)組轉(zhuǎn)換、去重等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
PHP中include/require/include_once/require_once使用心得
include() 、require()語(yǔ)句包含并運(yùn)行指定文件。這兩結(jié)構(gòu)在包含文件上完全一樣,唯一的區(qū)別是對(duì)于錯(cuò)誤的處理。require()語(yǔ)句在遇到包含文件不存在,或是出錯(cuò)的時(shí)候,就停止即行,并報(bào)錯(cuò)。include()則繼續(xù)即行。2016-08-08
PHP實(shí)現(xiàn)的mongoDB數(shù)據(jù)庫(kù)操作類(lèi)完整實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的mongoDB數(shù)據(jù)庫(kù)操作類(lèi),結(jié)合完整實(shí)例形式詳細(xì)分析了php基于單例模式針對(duì)mongoDB數(shù)據(jù)庫(kù)連接、增刪改查、統(tǒng)計(jì)等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
php中0,null,empty,空,false,字符串關(guān)系的詳細(xì)介紹
本篇文章是對(duì)php中0,null,empty,空,false,字符串關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php實(shí)現(xiàn)將普通數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù)
在日常的開(kāi)發(fā)工作中免不了要寫(xiě)接口,json格式文本的輸出是制作接口必須掌握的,所以本文主要為大家詳細(xì)介紹了php如何將普通數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù),需要的可以參考下2023-11-11

