php json多层乱码解决

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值