Fix Malformed UTF-8 characters, possibly incorrectly encoded技术
PHP 的 json_encode 函数处理一些数据的时候,有时候会出现 Malformed UTF-8 characters, possibly incorrectly encoded 这种错误,错误代号 5。这个问题怎么解决呢?问题的根本在于非法字符,一般情况下是不会出现的,要认真的查看代码,找出哪一步生产出了非法字符。
比如字符串:
/s/%D0%C5%B4%FB%D7%CA%BD%F0%C8%EB%CA%D0%B1%BB%B7%A3/
当你使用 json_encode 处理的数据包含上面的字符串的时候,是不会有什么问题的,但是如果你一不小心,将它 urldecode 了,这下就产生了垃圾数据,非法编码了,这个就是进攻吧。
使用 json_last_error_msg() 可以查看错误原因:
Malformed UTF-8 characters, possibly incorrectly encoded
怎么办?好的解决办法就是再将其转码一次,如下:
mb_convert_encoding($data, 'UTF-8', 'UTF-8');
这种非法的垃圾数据出现在文本后,使用编辑器打开,vim 都不能正确的识别文本文件的编码,所有的长编码字符全部变成了乱码,通过乱码就能断定文本是有问题的,去除了文件中的非法字符后,vim 默认就会正常的打开文件。
暂无