首頁  >  文章  >  後端開發  >  php 陣列如何轉編碼

php 陣列如何轉編碼

藏色散人
藏色散人原創
2020-08-18 10:04:302381瀏覽

php數組轉編碼的方法:1、使用iconv函數遍歷數組轉換字符集;2、利用var_export和eval方法實現轉換;3、利用遞歸將數組進行轉碼。

php 陣列如何轉編碼

推薦:《PHP影片教學》 

PHP陣列中文字元編碼互相轉換的三種解決方法

一、使用iconv函數遍歷數組轉換字元集

/*
* 字符串/二维数组/多维数组编码转换
* @param string $in_charset
* @param string $out_charset
* @param mixed $data
*/
function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){
if (!is_array($data)){
$output = iconv($in_charset, $out_charset, $data);
}elseif(count($data)===count($data, 1)){//判断是否是二维数组
foreach($data as $key => $value){
$output[$key] = iconv($in_charset, $out_charset, $value);
}
}else{
eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data,
TRUE)).';');
}
return $output;
}

二、利用var_export(), eval()方法

/** * 将含有GBK的中文数组转为utf-8 * * @param array $arr 数组 * @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; // 这里转码之后可以输出json // return json_encode($ret); }

#原理很簡單

var_export設定第二個參數為true,傳回陣列原型字串,將字串轉換為utf-8編碼,之後再用eval來執行傳回(類似匿名函數?),至此完美解決問題。

eval() 函數小結:

條件:eval() 函數把字串依照 PHP 程式碼來計算。字串必須是合法的 PHP 程式碼,且必須以分號結尾。

如果沒有在程式碼字串中呼叫 return 語句,則傳回 NULL。如果程式碼中存在解析錯誤,則 eval() 函數傳回 false。

$a ="hello"; $res = eval("return $a;"); print_r($res); //

在賦值時必須用反斜線將$標示符轉義eval("\$str = \"$str\";"); echo $str;

三、利用遞歸將數組轉碼(當eval被禁用時)

/** * UTF-8编码 GBK编码相互转换/(支持数组) * * @param array $str 字符串,支持数组传递 * @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; } } }

以上是php 陣列如何轉編碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn