首页 > 编程 > PHP > 正文

phpjson多层乱码解决

2019-11-08 18:21:46
字体:
来源:转载
供稿:网友

 

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);    }}?>

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表