phpjson多层乱码解决

 

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

?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值