В ответе JSON случайно появляется спецификация - PullRequest
3 голосов
/ 22 сентября 2011

Я реализую связь между двумя серверами, используя JSON и cURL. Проблема в том, что иногда в ответе JSON добавляется спецификация (метка порядка следования байтов) перед открывающей скобкой. Мне удалось обрезать его и успешно проанализировать строку JSON, но, учитывая, что JSON генерируется моим собственным кодом, я понятия не имею, откуда взялась эта спецификация.

Я использую json_encode (), чтобы сгенерировать ответ, а header () + echo, чтобы напечатать его, и, насколько я могу судить, json_decode () не создает никаких спецификаций. Соответствующие файлы .php кодируются в UTF-8 и не содержат спецификацию (согласно Notepad ++). Помимо cURL я также пытался выполнять запросы с использованием Chrome и python (urllib2). Хотя Chrome не регистрирует никакую спецификацию вообще, python из-за этого регулярно не анализирует входящий JSON.

Итак, есть ли какой-то нюанс в использовании эха, который как-то дает такой результат? С чего мне начать искать источник проблемы и какое может быть решение?

1 Ответ

1 голос
/ 17 ноября 2011

У меня была такая же проблема. Я выводил json из PHP, и в верхней части страницы были включены другие файлы классов. Эти файлы ничего не выводят, но когда они были включены, я получал столько же байтовых меток, сколько и файлов. Так что, если бы у меня было 4 включения, у меня также было 4 спецификации в начале моего json.

Я убедился, что во включениях не печатались никакие данные, и не было никаких случайных возвратов каретки за пределами тегов PHP. Я пробовал заголовки, такие как "application-json" и т. Д., Но ничего не получалось.

В конце концов, Я просто открыл каждый PHP-файл в notepad ++, перешел в «Кодирование» и изменил его с UTF-8 на ANSI, затем сохранил. возвращая действительный JSON. Я не внес никаких изменений в код PHP.

Это решение все еще кажется не идеальным. Поскольку мы не выводим что-либо из этих включенных файлов, ничего не должно быть затронуто.

...