咨询电话:
15628812133
20
2024/08

PHP灵异现象之--相同内容的字符串为什么字符串长度不一样

发布时间:2024-08-20 16:10:00
发布者:已经写了
浏览量:
0

最近在开发项目的时候,定义了一个内容比较多的数组,目的呢是为了在多个功能点不用多次的去定义这个数组,毕竟内容很多重复定义看起来也很不舒服,为了更好的储存这个数组的数据啊,我直接把他格式化成了JSON字符串,存到数据库里面去,这样也可以通过后台去管理和修改这个数组的内容,来实现相关的功能。

但是在调用的时候却发生了一个灵异的事件,明明直接使用JSON_DECODE方法就可以把json字符串还原成数组了,结果却返回了null,很是奇怪,于是我就打印了一下这个json字符串,输出的内容没问题啊,格式也没问题。

PHP灵异现象之--相同内容的字符串为什么字符串长度不一样

如图,上下两个变量输出的内容一摸一样。但是奇怪的是长度,长度竟然不一样,有点奇怪啊。很明显两个字符串的结构和内容都是一样的,但是长度不一样,我就考虑难道是字符集发生了变化吗,这么奇怪吗,但是用mb_detect_encoding函数打印了一下字符串的字符集,结果是UTF-8没有问题。

这个时候,有点无解了啊,很明显这个长的字符串里面有很多隐形的字节啊,导致了json_decode反序列化json字符串失败了。然后我就想里面是不是又什么\n\r的字符啊,看不到的字符。用字符串替换了一下,也没有反应。

最后发现原来是,提交数据的时候由于对数据又XSS过滤功能,直接被htmlspecialchars函数把我这些内容给换为 HTML 实体了,结果可不就是在打印的时候没有任何的变化,但是字符串的长度比原有的长度长了很多。找到问题,解决问题就比较简单了,把内容使用htmlspecialchars_decode函数将内容重新格式化为字符串,在json_decode转换成数组,就可以正常使用了。

关键词:
返回列表