проблема json_encode - PullRequest
       7

проблема json_encode

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

Это меня совершенно озадачило:

print_r($json);
echo json_encode($json);

вывод:

Array
(
    [query] => dia
    [suggestions] => Array
        (
            [0] => Diana Johnson
            [1] => Diane Abbott
        )

)
{"query":"dia","suggestions":[null,null]}

Что, черт возьми, идет не так?

edit Просто добавим к общему мнению, вот еще один пример:

Array
(
    [query] => david
    [suggestions] => Array
        (
            [0] => David Cameron
            [1] => David Amess
            [2] => David Anderson
            [3] => David Blunkett
            [4] => David Burrowes
        )

)
{"query":"david","suggestions":["David Cameron",null,null,null,null]}

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Я публикую это как ответ, потому что мне нужны полные возможности форматирования обычного поля ответа.

Да, это UTF-8, все в порядке.Из интерактивного приглашения PHP:

php > $david = urldecode('David%A0Amess');
php > echo json_encode($david);
null
php > $david = urldecode('David%20Amess');
php > echo json_encode($david);
"David Amess"
php > $david = urldecode('David%c2%a0Amess');
php > echo json_encode($david);
"David\u00a0Amess"

Итак, мы можем предположить , что вы имеете дело с либо ISO-8859 или Windows-1252, учитывая, что мы имеем делосо сломанным NBSP. Мы можем исправить это с помощью iconv:

php > $david = urldecode('David%A0Amess');
php > $david_converted = iconv('Windows-1252', 'UTF-8', $david);
php > echo json_encode($david_converted);
"David\u00a0Amess"

Итак, это означает, что вам нужно будет не доверять что вы вытаскиваете из MySQL, предполагая, что вы сделали SET NAMES.Очевидно, что-то пошло не так, когда вы вставляли данные.Вы, вероятно, не давали MySQL правильно сформированный UTF-8, и он тупо не жаловался.(Если бы вы использовали другие, более умные, более правильные базы данных и попытались вставить незакодированный NBSP, они бы отклонили ввод.)

2 голосов
/ 23 марта 2011

Это похоже на скрипт автозаполнения.Я предполагаю, что ваши результаты загружаются из базы данных, вы уверены, что они utf-8?Если вы не можете воспроизвести эту функциональность путем жесткого кодирования массива, возможно, это проблема кодирования.

Согласно http://php.net/manual/en/function.json-encode.php, "Эта функция работает только с данными в кодировке UTF-8."

Вы также можете использовать http://php.net/manual/en/function.json-last-error.php, чтобы увидеть последнюю ошибку.

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