-
将GBK编码的含有中文数组转为json格式,先将每个值进行urlencode,然后json_encode,最后urldecode即可。
// 示例代码
$testJSON=array('title' => '标题', 'url' => 'meitu.jpg');
foreach ( $testJSON as $key => $value )
{
$testJSON[$key] = urlencode ( $value );
}
$ret = urldecode ( json_encode ( $testJSON ) );
print_r($ret );
2.将json转为数组
// 将GBK转为UTF-8后,再json_decode为数组json_decode($new_url, true),后边带true参数表示转为数组,否则默认为对象形式的
$new_url = iconv("GBK","UTF-8//IGNORE", $ret );
print_r(json_decode($new_url, true));
3.终极处理方法,对数组进行编码转换
用途:中文处理,在返回json时对原来的gbk编码进行utf-8转码
"周星驰",
'age' => "23",
'info' => array(
'address' => '旺角',
),
),
array(
'name' => "发哥",
"age" => 25
),
);
$in_charset = "gbk";
$out_charset = "utf-8";
function array_iconv($in_charset,$out_charset,$arr){
return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));
}
$res = array_iconv($in_charset, $out_charset, $arr);
$res = json_encode($res);
print_r($res);
原理很简单 var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回(类似匿名函数?),至此完美解决问题。
eval() 函数小结:
条件:eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
$a ="hello";
$res = eval("return $a;");
dump($res);
// 在赋值时必须用反斜杠对$标示符进行转义
eval("\$str = \"$str\";");
echo $str;
将上边的方法封装为一个函数,方便以后直接调用array_iconv_to_json($arr)即可:
/**
* 将含有GBK的中文数组转为json
*
* @param array $arr 数组
* @param string $in_charset 原字符串编码
* @param string $out_charset 输出的字符串编码
* @return array
*/
function array_iconv_to_json($arr, $in_charset="gbk", $out_charset="utf-8")
{
$ret = eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));
return json_encode($ret);
}
``` // UTF-8编码转换为GBK编码(支持数组) function utf8_to_gbk($str) { if(is_array($str)) { foreach($str as $k => $v) { $str[$k] = utf8_to_gbk($v); } return $str; } else { if(is_string($str)) { return iconv('UTF-8', 'GBK//IGNORE', $str); } else { return $str; } } }