接口请求出现 json_encode error: Malformed UTF-8 characters, possibly incorrectly encoded
问题
因为接口返回数据的时候会将数组转换成JSON
格式返回, 如果遇到非UTF-8的字符会报:
json_encode error: Malformed UTF-8 characters, possibly incorrectly encoded
畸形的UTF-8字符,可能编码不正确
排查问题的过程中,确定问题为:
## 以数组的形式读取字符串
$temp = 'AD钙+奶';
var_dump($temp[0]); # A
var_dump($temp[1]); # D
var_dump($temp[2]); # �
var_dump($temp[4]); # �
var_dump($temp[5]); # +
## json_encode error: Malformed UTF-8 characters, possibly incorrectly encoded
return json_encode([
'test' => $temp[2]
]);
可以发现 当下标
为 0 1 5 时 都是正常的,当下标
为 2 时 返回了�
因为PHP
是可以以数组的形式读取字符串的,在这里钙
字占了3个字节,所以读取$temp[2]
时,出现了非UTF-8的字符.
json_encode()
再将包含非UTF-8字符数组转化为JSON
格式时,就返回了这个错误.