一、利用 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””;””);