php json多层乱码解决

来源:互联网 发布:淘宝上好看的女鞋店铺 编辑:程序博客网 时间:2024/05/21 14:10

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
    
$dataurldecode($data);

    
//缩进处理
    
$ret'';
    
$pos0;
    
$lengthstrlen($data);
    
$indentisset($indent)?$indent :'    ';
    
$newline"\n";
    
$prevchar'';
    
$outofquotestrue;

    
for($i=0$i<=$length$i++){

        
$charsubstr($data$i1);

        
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){
        
$valurlencode($val);
    }
}

?>

个人主页

0 0