json_decode返回值为NULL的解决方法

本文探讨了在处理JSON数据时遇到的UTF8字符冲突问题,特别是在MySQL中存储JSON字段时出现的特殊字符显示异常。通过使用PHP的json_last_error函数定位错误,并结合正则表达式preg_match过滤非UTF8字符,最终确定问题根源为旧版本的MySQL bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 使用 json_last_error 判断error 值及对应错误原因。文档
  2. 如果为 3,可以使用如下方式过滤掉非 utf8 字符。
preg_match('/[\x00-\x1F\x80-\x9F]/u', $str, $match);
// 将得到字符串 base64 转码即可找到该不可显示的特殊字符

找到特殊字符 \u001f
发现 mysql 在 json 字段中存入该字段会显示为可见字符。

最后发现该问题为旧版本bug,记录如上。
mysql 说明:https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-21.html

参考:

  1. https://www.cnblogs.com/wt645631686/p/8419932.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值