phpjson多层乱码解决

2/22/2017来源:ASP.NET技巧人气:2986

 

http://blog.csdn.net/fdipzone/article/details/28766357

 

php5.4 以后,json_encode增加了JSON_UNESCAPED_UNICODE , JSON_PRETTY_PRINT 等几个常量参数。使显示中文与格式化更方便。

 

多层中文乱码解决:

 

<?php

调用:

header('content-type:application/json;charset=utf8'); $arr =array(     'status'=> true,     'errMsg'=> '',     'member'=>array(         array(             'name'=> '李逍遥',             'gender'=> '男'         ),         array(             'name'=> '赵灵儿',             'gender'=> '女'         )     ) ); echo jsonFormat($arr);

 

/** Json数据格式化  * @param  Mixed $data   数据  * @param  String $indent 缩进字符,默认4个空格  * @return JSON  */ function jsonFormat($data, $indent=null){     //对数组中每个元素递归进行urlencode操作,保护中文字符     array_walk_recursive($data,'jsonFormatProtect');     //json encode     $data= json_encode($data);     //将urlencode的内容进行urldecode     $data= urldecode($data);     //缩进处理     $ret= '';     $pos= 0;     $length= strlen($data);     $indent= isset($indent)?$indent :'    ';     $newline= "\n";     $prevchar= '';     $outofquotes= true;     for($i=0; $i<=$length; $i++){         $char= substr($data, $i, 1);         if($char=='"' && $prevchar!='\\'){             $outofquotes= !$outofquotes;         }elseif(($char=='}' || $char==']') && $outofquotes){             $ret.= $newline;             $pos--;             for($j=0; $j<$pos; $j++){                 $ret.= $indent;             }         }         $ret.= $char;         if(($char==',' || $char=='{' || $char=='[') && $outofquotes){             $ret.= $newline;             if($char=='{' || $char=='['){                 $pos++;             }             for($j=0; $j<$pos; $j++){                 $ret.= $indent;             }         }         $prevchar= $char;     }     return$ret; } /** 将数组元素进行urlencode  * @param String $val  */ function jsonFormatProtect(&$val){     if($val!==true && $val!==false && $val!==null){         $val= urlencode($val);     } } ?>