php 服务器端解决json_decode()的bug 输出为null, json_last_error函数为4语法错误


 php 服务器端解决json_decode() bug 问题:
  问题描述: json_decode() 转换json字符串时输出结果为 null,函数返回值为false
 出现问题的分析:
     1. 有可能是我们在使用插件的时候,插件对数据处理是添加了一些额外的符号,而这种符号对于json_decode来讲
    是属于非法字符或者符号
     2. 有可能是我们在提交数据的时候额外提交了空格、换行符
      3. 有可能是数据中有多余的 , 逗号
      4. 有可能是单双引号编译错误
      5. 有可能是无知名的错误字符无法进行转义
      6. json不支持gbk编码,也就是说数据的编码错误
 
  解决问题的方法:
     1. 建议重新封装json_encode()   json_decode()
        重新封装的主要目的在于解决编码与字符安全问题
 function  _json_encode($data,$option=null){
       return  htmlentities(urlencode(json_encode($data,$option)));
  }
 
  function _json_decode($json_str,$assoc=true){
      return  json_decode(urldecode(html_entity_decode($json_str)),$assoc);
  }
 
 
     2. json_decode之前先进行错误排除,使其返回的数据符号json_decode编译规则

格式化错误的json数据,使其能被json_decode()解析
不支持健名有中文、引号、花括号、冒号
不支持健指有冒号*
function format_ErrorJson($data,$quotes_key=false)
{
    $con = str_replace('\'', '"', $data);//替换单引号为双引号
    $con = str_replace(array('\\"'), array('<|YH|>'), $con);//替换
    $con = preg_replace('/(\w+):[ {]?((?<YinHao>"?).*?\k<YinHao>[,}]?)/is', '"$1": $2', $con);//若键名没有双引号则添加
    if ($quotes_key) {
        $con = preg_replace('/("\w+"): ?([^"\s]+)([,}])[\s]?/is', '$1: "$2"$3', $con);//给键值添加双引号
    }
    $con = str_replace(array('<|YH|>'), array('\\"'), $con);//还原替换
    return $con;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值