Странное JSON-кодирование с использованием json_encode - PullRequest
6 голосов
/ 28 июня 2011

Я использую WordPress вместе с плагином JSON API (http://wordpress.org/extend/plugins/json-api/) для генерации ответов на наш другой сайт.

Я столкнулся с действительно странной проблемой (мы используем PHP 5.3.6), когда я передаю следующий массив http://pastebin.com/xdfYjrvK в json_encode (), он дает мне это (с типом содержимого json): http://pastebin.com/T61XGPP5

Так что хрень в начале, в примере выше это2609 и 0, в конце концов, он меняется в зависимости от размера ответа, больше содержимого -> более высокое шестнадцатеричное число. Он также появляется только тогда, когда объем ответа "достаточно высок", поэтому он работает с небольшими ответами.

Сначала я подумал, что это плагин, но он работает локально (на двух разных компьютерах Mac OS X), и мы обновили все пакеты на VPS (Debian, Apache, Nginx, PHP) до последних версий.

Отображается только при отправке типа содержимого, а не при выводе результата $ в виде простого текста вместо application / json:

$charset = get_option('blog_charset');
if (!headers_sent()) {
  header('HTTP/1.1 200 OK', true);
  header("Content-Type: application/json; charset=$charset", true);
}

echo $result;

$ charset установлен в utf-8.

Консоль Google Chrome сообщает: «Resource интерпретируется как Document, но передается с приложением MIME типа / json. "

Итак, кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Это похоже на чанкованное кодирование (http://en.wikipedia.org/wiki/Chunked_transfer_encoding).. Убедитесь, что в ответе в заголовках правильно задана длина содержимого, чтобы убедиться, что веб-сервер не заставляет использовать CTE.

0 голосов
/ 28 июня 2011

Одно требование, которое имеет json, заключается в том, что все данные, которые вы ему передаете , должны быть в кодировке UTF-8. json_encode () не делает это автоматически. Таким образом, вы можете попробовать запустить этот array_map("utf8_encode", $array);, прежде чем json_encode его.

Остальное ... Это выглядит странно, так что я просто догадываюсь ...

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