PHP json_decode函数只处理UTF-8编码的字符串


PHP json_decode function just work UTF-8 encoded strings?

在这里您可以阅读json_decode函数

仅适用于UTF-8编码的字符串。

那么,为什么以下几行会产生不同的输出呢?

echo utf8_decode('1ñ2'), "'n";
echo json_decode('"' . '1ñ2' . '"'), "'n";

"ñ"字符不是有效的UTF-8字符,即使json_decode在将该字符传递到它必须解码的字符串中时也不会抱怨。

这是因为这两个函数都在做完全不同的事情。虽然json_decode()保持字符编码原样(utf-8),只是将json数据解析为PHP结构,但utf8_decode()将字符编码转换为ISO-8859-1。但是ISO-8859-1不知道这种特殊的多字节字符。