json_decode не может декодировать строку JSON - PullRequest
1 голос
/ 27 марта 2011

У меня есть сжатая строка JSON base64, после преобразования этой строки 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 ]

9 голосов
/ 27 марта 2011

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" . ''

Поэтому преобразуйте кодировку символов, используя mb_convert_encoding или iconv для преобразования в UTF-8 перед вызовом json_decode.

1 голос
/ 27 марта 2011

Между завышенной строкой находится масса нераспознанных символов - поэтому она читает {?"?S?t? и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...