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