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