一、利用 var_export(), eval() 方法
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 將含有 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 。
?
1
2
3
4
5
6
7
8
9
10
11
$a =”hello”;
$res = eval(“return $a;”);
print_r($res);
// 在賦值時必須用反斜槓對 $標示符進行轉義
eval(“$str = “$str””;””);