php生成返回json对象数组(json支持中文)
2013-05-07 18:09
609 查看
php生成返回json对象数组
改下
你会发现上面虽然我页面和传入字符对定义了为UTF-8,为什么生成的json数据还是乱码:
"name":"\u4e2d\u56fd".....
现在想办法将这串不知道什么的转为中文:
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
这次成功了,运行结果如下:
<h1>注意两种方法生成的对象数组在结构上的区别</h1> <?php $jarr=array( 'total' => 239, 'list' => array( array( 'code'=>'001', 'name'=>'中国', 'addr'=>'Address 11', 'col4'=>'col4 data' ), array( 'code'=>'002', 'name'=>'Name 2', 'addr'=>'Address 12', 'col4'=>'col4 data' ), ) ); ?> <h1>php生成返回json对象数组(方法一)</h1> <?php $jobj=new stdclass(); //实例化stdclass,这是php内置的空类,可以用来传递数据,由于json_decode后的数据是以对象数组的形式存放的,所以我们生成的时候也要把数据存储在对象中。 foreach($jarr as $key=>$value){ $jobj->$key=$value; } print_r($jobj);//打印传递属性后的对象 echo'使用$jobj->list[0][\'code\']输出数组元素:'.$jobj->list[0]['code'].'<br>'; echo'编码后的json字符串:'.json_encode($jobj).'<br>'; ?> <pre /> <hr /> <pre /> <h1>php生成返回json对象数组(方法二)</h1> <?php echo'编码后的json字符串:'; echo $str=json_encode($jarr);//将数组进行json编码 echo'<br>'; $arr=json_decode($str);//再进行json解码 print_r($arr);//打印解码后的数组,数据存储在对象数组中 echo'使用$arr->list[0]->code输出数组元素:'.$arr->list[0]->code; ?>
改下
你会发现上面虽然我页面和传入字符对定义了为UTF-8,为什么生成的json数据还是乱码:
"name":"\u4e2d\u56fd".....
现在想办法将这串不知道什么的转为中文:
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
/************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $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字符串(兼容中文) * @param array $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":
相关文章推荐
- jquery的ajax处理php返回数组,及json_encode中文为空的问题
- TreeLoader扩展,支持josn-plugin返回的json对象中包含的数组值
- php中json_decode返回数组或对象
- PHP 关于json_decode返回数组还是对象。
- php中json_decode返回数组或对象的实例
- jquery的ajax处理php返回数组,及json_encode中文问题
- php中json_decode返回数组或对象
- PHP返回json数据前台生成JS对象出错
- php从数据库生成数组,输出中文json,不使用urlencode
- 微信自定义菜单,php配置一个多维数组,通过json_encode()生成json字符串,中文会转为\uxxxx,微信报错!
- PHP用json_encode()将数组里面带有中文的字串保留以JSON格式返回
- 两种方法在Django框架中支持后台返回包含中文的JSON/数组格式
- 请求php返回json生成自定义对象
- 本地win7 把数组写入 txt 文本日志 json_encode转换中文,需要加上JSON_UNESCAPED_UNICODE 不适用unicode --仅仅支持php5.4以后
- PHP封装返回Ajax字符串和JSON数组的方法
- PHP将数组转为json出现的中文乱码的问题
- php数组转json对象并保留数字索引
- PHP解析Gson生成的Json数组
- php采用tcpdf生成pdf支持中文,图片
- 深入理解PHP JSON数组与对象