LMLPHP后院

Fix Malformed UTF-8 characters, possibly incorrectly encoded技术

maybe yes 发表于 2020-08-18 21:50

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 默认就会正常的打开文件。

2022-07-05 15:36:38 1657006598 0.019984