json_decode无法解码JSON字符串

时间:2011-03-27 14:40:36

标签: php json

我有一个gzip压缩的base64 JSON字符串,转换后这个字符串json_decode()无法解码它。我认为这是一个编码问题,但一直无法解决。

我正在运行PHP 5.2,它不支持json_last_error()。

有谁知道这里发生了什么?

<?php 
$gzipped_base64 = "7b0HYBxJliUmL23Ke39K9UrX4HShCIBgEyTYkEAQ7MGIzeaS7B1pRyMpqyqBymVWZV1mFkDM7Z28995777333nvvvfe6O51OJ/ff/z9cZmQBbPbOStrJniGAqsgfP358Hz8ifvGv8dGv8frXaH+N7NeY/hpvf40vf43LXyP/Nepf4/zXKH+N6te4ou8e0f9f0e/4tqHff8mv8f8A";

$json = gzinflate(base64_decode($gzipped_base64));

echo $json; // prints: {"StackOverflow":"Rocks"}

$array = json_decode($json, true);

echo var_dump($array); // prints: NULL
?>

2 个答案:

答案 0 :(得分:9)

json_decode期望输入为UTF-8编码,但您的数据似乎是用UTF-16编码的:

var_export($json);

输出结果为:

'{' . "\0" . '"' . "\0" . 'S' . "\0" . 't' . "\0" . 'a' . "\0" . 'c' . "\0" . 'k' . "\0" . 'O' . "\0" . 'v' . "\0" . 'e' . "\0" . 'r' . "\0" . 'f' . "\0" . 'l' . "\0" . 'o' . "\0" . 'w' . "\0" . '"' . "\0" . ':' . "\0" . '"' . "\0" . 'R' . "\0" . 'o' . "\0" . 'c' . "\0" . 'k' . "\0" . 's' . "\0" . '"' . "\0" . '}' . "\0" . ''

因此,在调用json_decode之前,请使用mb_convert_encodingiconv将字符编码转换为UTF-8。

答案 1 :(得分:1)

在膨胀的字符串之间有大量无法识别的字符 - 因此它会显示{?"?S?t?等...