jonvi 发表于 2018-12-21 13:31:46

php生成返回json对象数组(json支持中文)

  php生成返回json对象数组
  

注意两种方法生成的对象数组在结构上的区别

php生成返回json对象数组(方法一)




php生成返回json对象数组(方法二)
  

http://s3.运维网.com/wyfs02/M01/1D/46/wKiom1MYN2OTQEC4AAPwCGKxQ7A683.jpg
  

  

  改下
  你会发现上面虽然我页面和传入字符对定义了为UTF-8,为什么生成的json数据还是乱码:
  "name":"\u4e2d\u56fd".....
  现在想办法将这串不知道什么的转为中文:
  

  解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
/**************************************************************
*
*使用特定function对数组中所有元素做处理
*@paramstring&$array   要处理的字符串
*@paramstring$function   要执行的函数
*@return boolean $apply_to_keys_also   是否也应用到key上
*@access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false){
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
*将数组转换为JSON字符串(兼容中文)
*@paramarray   $array      要转换的数组
*@return string      转换得到的json字符串
*@access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
echo JSON($jarr);  

这次成功了,运行结果如下:

{"total":"239","list":[{"code":"001","name":"中国","addr":












页: [1]
查看完整版本: php生成返回json对象数组(json支持中文)