В PHP включены файлы, которые делают данные JSON недействительными

Я относительно новичок в разработке php, но не в веб-разработке в целом.

У меня есть следующий файл php:

<?php class dialogResult{ var $Message; var $Title; var $Height; var $GenericData; function __construct(){ $this->Height = 10; } } header("Cache-Control: no-cache", true); header("Content-type: application/json; charset=utf-8", true); $dr = new dialogResult(); $dr->Message = "A Test Message encoded"; $dr->Height = 10; $dr->GenericData = "Empty"; $dr->Title = "My Message"; echo(json_encode($dr)); ?> 

Это возвращает данные JSON, как ожидалось, однако, если я переведу класс в отдельный файл и добавлю include, include_once, require или require_once, он возвращает недопустимые данные JSON. Может ли кто-нибудь сказать мне, почему это было бы?

Не нужно просто перемещать этот класс, если у меня есть ЛЮБОЙ включенный файл, он делает данные недействительными.

Благодаря,

Кит

Вот класс включения, я также попытался удалить?>

 <?php class dialogResult{ var $Message; var $Title; var $Height; var $GenericData; function __construct(){ $this->Height = 10; } } 

В любом месте нет ведущих или конечных пробелов. Вот возвращаемый «недействительный» JSON:

 {"Message":"A Test Message encoded","Title":"My Message","Height":10,"GenericData":"Empty"} 

который дает мне «Неожиданный токен», если я попытаюсь использовать JSONLint для его анализа. Конечно, если я наберу его вручную JSONLint, тогда это нормально. Я предполагаю, что есть какой-то персонаж, которого я не могу идентифицировать / видеть в JSON, но не знаю, как его найти.

Related of "В PHP включены файлы, которые делают данные JSON недействительными"

Даже комментарии Мартина и Навнава правы, но пробелы обычно не недействительны для формата Json, поскольку они могут работать с двоичными форматами (например, GIF, JPEG и т. Д.).

Таким образом, ваша проблема может быть заголовком спецификации заголовком 2/3 байта, который многие редакторы не показывают или, что еще хуже, добавляют в начале файла.

РЕДАКТИРОВАТЬ

Возможный способ удаления спецификации – использовать и IDE, например phpstorm , с двоичным безопасным редактором, способным обнаруживать и удалять спецификацию.

Возможно, вы эхом / печатаете что-то на экране во включенных файлах.

JSON не подходит для другого контента.

Также ваши ?> Теги – есть ли какие-либо строки-перерывы / пробелы после этого тега? Если это так, есть ваша проблема. Удалить их. Infact, если файл будет только конинировать PHP-код, полностью удалите тег ?> Поскольку он не нужен.

Проверьте свой класс, если есть пробельные символы до [? Php и позади?]. Это приведет к тому, что контент, предоставленный браузеру, и создаст заголовок HTTP, не может быть создан предупреждением, что даст плохой JSON.

Проверьте свой сценарий – тот, который вы включаете в него, – также.

Это стало «лучшей практикой» для многих веб-разработчиков, которые просто не используют?> По этой точной причине.

Как выглядят недопустимые данные?