• PHP json_decode 函数解析 json 结果为 NULL 的解决方法


    在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数。

    但是在解析的时候,使用 json_decode() 函数解析的结果一直是 NULL,没有出现希望解析成的数组。下面是问题和分析:

    1. 当输出 json 字符串时,代码和页面的显示内容分别是:

    echo $content = $res[0]['con']['content'];

    只需要考虑 $content , $res[0]['con']['content'] 是从返回的数据中取出 content 的值,这里不需要考虑。这时页面显示:

    {"bpic":"group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg","bname":"112","breason":"22","about1":"3334","about2":"444","about3":"555","tpic1":"group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg","tpic2":"group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg","tpic3":"group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg"}

    稍微美化一下:

    {
    "bpic":"group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg", "bname":"112", "breason":"22", "about1":"3334", "about2":"444", "about3":"555", "tpic1":"group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg", "tpic2":"group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg", "tpic3":"group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg" }

    2. 此时使用 json_decode() 解析 $content,并使用 var_dump 打印:

    $content = json_decode($content,true);

    但是页面却显示 NULL。此时使用 json_last_error() 函数打印一下错误,页面显示4,也就是语法错误。

    echo $errorinfo = json_last_error();   //输出4 语法错误

    解决方法一:

    出现这个问题是因为在 json 字符串中反斜杠被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $content 即可:

    $content = htmlspecialchars_decode($content);

    此时再使用 json_decode() 函数解析,就没有问题了,页面输出:

    Array ( 
    [bpic] => group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg 
    [bname] => 112 [breason] => 22 [about1] => 3334 [about2] => 444 [about3] => 555 [tpic1] => group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg
    [tpic2] => group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg [tpic3] => group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg
    )

    解决方法二:


    在保存 json 数据时使用 urlencode() 函数:

    $content = urlencode(json_encode($content));

    解析时使用 urldecode() 函数:

    $content = urldecode($content);

    即可避免反斜杠转义造成的无法解析。

  • 相关阅读:
    【IDEA】IDEA自定义注解无法自动识别入参和出参
    vue脚手架安装成功,但依然提示'vue' 不是内部或外部命令,也不是可运行的程序 或批处理文件。解决方案
    小程序怎么将input宽输入字母全部转大写字母
    微信小程序van-popup左右弹窗无法显示白色背景
    vscode中实现滚轮缩放代码
    element-ui监听el-dialog关闭事件
    测试人必看的5本好书,没看过你就吃亏啦~
    解决Access在Windows7下数据源的配置问题(32位)
    微软Win10补丁KB5005565更新后打印机连接不上(0x0000011b)
    Windows设置共享文件夹无法访问问题
  • 原文地址:https://www.cnblogs.com/dee0912/p/4175151.html
Copyright © 2020-2023  润新知