phpjson_decode史诗级错误3解决方案,无人能解
php吧
全部回复
仅看楼主
level 5
Gs20010521 楼主
最近一个项目需要把json字符串存入mysql数据库,然后奇怪的问题出现了,取出数据后使用json_decode()解析后输出为空,然而本以为是json字符串有错误,我又尝试着把从数据库取出的json字符串输出到页面上用js去解析又没有错误
于是打印json_last_error() 和 json_last_error_msg()函数查看错误提示,输出为:3和Control character error, possibly incorrectly encoded
百度了一堆,什么转换编码什么bom头字符试了全部无效,网上全是牛马,查了将近7749天资料,无人能解
无奈硬着头皮再次测试: 数据库取出数据后用file_put_contents保存成文件,然后再用file_get_contents取出后使用json_decode仍然输出为空, 于是我将保存的文件下载到本地打开查看(大概看了一两个小时和测试json格式都是
正确的
),一个无意间的操作:我又将下载到本地的文件重新上传覆盖到ftp目录后:再次用file_get_contents取出 json_decode解析$$奇怪的事情发生了(正常输出内容了),这么诡异的事情也有? 仅仅是把文件下载下来然后重新上传覆盖json_decode才可以解析??? 出现这种问题整个人头都大了,我敢说整个cn互联网没人能解决这个问题,百度找出的资料都是牛马人发的,它们从未提出过Control character error, possibly incorrectly encoded的错误,唯一提到的Control character error, possibly incorrectly encoded错误说成是编码问题,我编n****
差点就放弃了,找不出资料,没人能解决我的问题
我放弃了在国内求助,因为它们都是牛马人
我无意间在一个名为stackxxxxx的论坛上找到了资料
回复列表中一位路过的外国网友,它的网名叫:votes
它的一句回复解决了这个问题:
you can remove the control character, PCRE supports the POSIX notation for character classes [:cntrl:]
它是我爹
2021年07月28日 17点07分 1
level 5
Gs20010521 楼主
原来替换掉控制字符在使用json_decode就可以正常输出了
$json = preg_replace('/[[:cntrl:]]/', '', $json);
cn牛马人太多了,再也不敢去百度查资料了
2021年07月28日 17点07分 2
level 11
你一开始入库时候,可能就不是正确的json字符串?
2021年07月29日 00点07分 3
是正确的
2021年07月29日 06点07分
隐藏bug,入库后取出无法解析,直接可以解析
2021年07月29日 06点07分
原因大概是入库和取出,这其中一个操作会在json字符串里添加隐藏的控制字符,这个字符不可见,只能用正则/[[:cntrl:]]/替换掉
2021年07月29日 07点07分
@Gs20010521 可以发一组json看看吗
2021年07月29日 07点07分
level 1
emmm
2022年08月01日 08点08分 4
1