之前同事问了我一个有趣的问题,说为什么这个 json 字符串从缓存里读出来可以解析,但是作为一个 php 变量却解析错误呢?

先看一个我已经简化了的例子

$str = "\\";

$j = json_encode($str);

echo $j, PHP_EOL;

echo json_decode($j), PHP_EOL;

输出

"\\"

\

如果你直接把输出的 json 字符串赋值给一个 php 字符串变量的话,好玩的事情就发生了

$conf = <<

"\\"

EOD; // heredoc

// $conf = '"\\"'; // 单引号

// $conf = "\"\\\""; // 双引号

var_dump(json_decode($conf, true));

echo json_last_error_msg(), PHP_EOL;

输出

NULL

Control character error, possibly incorrectly encoded

你就会发现,不管怎么搞,json_decode 总是失败的,然后我慢慢的把 json 字符串抽茧剥丝,最后只剩下“\\”,发现问题出在这里。

乍一看,这个字符串并没有什么特别之处,但是在我把它 echo 之后,终于搞明白到底为什么一直 json_decode 失败了

$conf = <<

"\\"

EOD;

echo $conf,PHP_EOL;

输出

\

“\\” 这货被转义了,然后这就不再是一个正常的 json 字符串了,所以 json_decode 就会失败,那么才能让它正确的被 decode 呢?看下面这段代码

$conf = <<

"\\"

EOD; // nowdoc

var_dump(json_decode($conf, true));

echo json_last_error_msg(), PHP_EOL;

输出

string(1) "\"

No error

就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。

更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号:PHP架构师

php json decode错误,一次有趣的 php json_decode error 分析相关推荐

  1. (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)...

    原文地址:解决fasterxml中string字符串转对象json格式错误问题 com.fasterxml.jackson.databind.ObjectMapper mapper = new com ...

  2. composer出现Invalid credentials for ‘https://packagist.phpcomposer.com/packages.json’的错误

    composer出现Invalid credentials for 'https://packagist.phpcomposer.com/packages.json'的错误 一.总结 一句话总结:出现 ...

  3. 解决特殊字符引起json解析错误--单引号、双引号转义

    解决特殊字符引起json解析错误–单引号.双引号转义 这几天在做一个题库管理,遇到了一个问题,将后台的json数据传到前台用parse解析时,出现了一个错误: Uncaught SyntaxError ...

  4. luaError json解析错误1

    JSON4Lua中的decode_scanString函数,从json字符串中解析出来的键或值,直接交由loadstring来处理了,这个地方针对大部分情况下的字符串解析是正常的,但针对含有转义字符的 ...

  5. Seata json decode exception, Cannot construct instance of `java.time.LocalDateTime`问题,有效解决!

    seata版本:1.4.2 浏览过很多文章,尝试过很多方法,最终问题定位到Seata的序列化方式.详情参考: Seata json decode exception, Cannot construct ...

  6. python2 ‘ascii‘ codec can‘t encode / decode 错误

    参考:Python 2.x 中的 'ascii' codec can't encode / decode 错误 用Python 2.x会经常碰到一个错误: UnicodeEncodeError: 'a ...

  7. php json语法错误,在PHP json_decode()中检测到错误的json数据?

    在PHP json_decode()中检测到错误的json数据? 通过json_decode()解析时,我正在尝试处理错误的json数据. 我正在使用以下脚本: if(!json_decode($_P ...

  8. Android之升级OkHttp编译提示错误如下Using ‘body(): ResponseBody?’ is an error. moved to val

    1 问题 升级okHttp库,编译项目错误如下 Using 'body(): ResponseBody?' is an error. moved to val 2 解决办法 原来的代码 val lis ...

  9. wampServer2.1错误(Could not execute menu item (internal error)

    安装wampServer2.1后提示以下错误 Could not execute menu item (internal error) [Exception] Could not perform se ...

最新文章

  1. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置、位置配置)实战
  2. Tomcat 配置安装
  3. ubuntu20.04安装noetic版本ros
  4. iview中嵌套使用tabs注意事项
  5. IDEA和VS code设置默认换行符为LF
  6. 【免费毕设】PHP校园二手信息网站的设计与开发(源代码+论文)
  7. 《微店赚钱一册通 ——开店+营销+推广 实战全攻略》一一1.5 微店有哪些优势...
  8. C语言区分大小写字母
  9. GlobalMapper20脚本应用(数据批量自动化处理)
  10. redis的配置文件修改
  11. 工程师思维(简化版)——聪明人的10个工程思维
  12. ubuntu中 /usr、/var、/opt目录解析
  13. 几种聚类算法的对比实验
  14. Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(二)
  15. 高数考研归纳 - 微分学 - 中值定理
  16. Gitlab CI/CD:入门指南
  17. 理解回忆 李烨的机器学习
  18. 对自己现阶段职业规划的一些思考
  19. What's UTF-8?
  20. aac音乐下载分享-张学友-情歌岁月精选

热门文章

  1. minecraft java_Minecraft Java版 1.13发布
  2. java中.lpad_Oracle中Lpad函数和Rpad函数的用法
  3. Robust image stitching with multiple registrations之浅见
  4. 聪明人管理配电室,都是这样搞定的!
  5. 手机H5网站 支付宝、微信支付遇到的问题和注意事项
  6. 介绍SFP SFP+ QSFP+ XFP QSFP28
  7. 苹果7手机严重卡顿_为什么安卓机用久了会卡顿,苹果却不会?这一点决定手机卡不卡!...
  8. Revit开发 - “附加模块”中添加“外部工具”
  9. 阴阳师百闻牌如何在电脑上玩 阴阳师百闻牌模拟器玩法教程
  10. 2022新版Git教程 从入门到实战(三)Git分支管理