最近在开发项目的时候,定义了一个内容比较多的数组,目的呢是为了在多个功能点不用多次的去定义这个数组,毕竟内容很多重复定义看起来也很不舒服,为了更好的储存这个数组的数据啊,我直接把他格式化成了JSON字符串,存到数据库里面去,这样也可以通过后台去管理和修改这个数组的内容,来实现相关的功能。
但是在调用的时候却发生了一个灵异的事件,明明直接使用JSON_DECODE方法就可以把json字符串还原成数组了,结果却返回了null,很是奇怪,于是我就打印了一下这个json字符串,输出的内容没问题啊,格式也没问题。
如图,上下两个变量输出的内容一摸一样。但是奇怪的是长度,长度竟然不一样,有点奇怪啊。很明显两个字符串的结构和内容都是一样的,但是长度不一样,我就考虑难道是字符集发生了变化吗,这么奇怪吗,但是用mb_detect_encoding函数打印了一下字符串的字符集,结果是UTF-8没有问题。
这个时候,有点无解了啊,很明显这个长的字符串里面有很多隐形的字节啊,导致了json_decode反序列化json字符串失败了。然后我就想里面是不是又什么\n\r的字符啊,看不到的字符。用字符串替换了一下,也没有反应。
最后发现原来是,提交数据的时候由于对数据又XSS过滤功能,直接被htmlspecialchars函数把我这些内容给换为 HTML 实体了,结果可不就是在打印的时候没有任何的变化,但是字符串的长度比原有的长度长了很多。找到问题,解决问题就比较简单了,把内容使用htmlspecialchars_decode函数将内容重新格式化为字符串,在json_decode转换成数组,就可以正常使用了。
上一篇: 阿里云对象存储OSS的使用步骤
下一篇: 图片素材管理工具——Billfish