Hostease提供优质的美国主机、香港主机、美国服务器、香港服务器、VPS云主机 租用服务
一、利用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\";" ); echo $str ; |
二、利用递归将数组转码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/** * 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 ; } } } |