Json error ctrl char

Я уже целый день пытаюсь это исправить и не могу заставить его работать. Нечто, что должно быть легко.

Затем я пытаюсь преобразовать результат в формат JSON с помощью функции PHP json_decode. Я делаю это так:

И сообщение об ошибке возвращает «Ошибка управляющего символа, возможно, неправильно закодированная»

Я уже пытался использовать полоски, удаление BOM, html_entities, удаление некоторых начальных символов, и ни один из них не работал.

Решение

Вы должны установить заголовок «Accept-Encoding» в «gzip, deflate», в противном случае ответ будет обрезан.

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение было подгружено во время выполнения.

Следующие константы указывают на тип ошибки, возвращенной функцией json_last_error() или хранящейся, как code в JsonException.

JSON_ERROR_NONE ( integer ) Не произошло никаких ошибок. Доступна начиная с PHP 5.3.0. JSON_ERROR_DEPTH ( integer ) Была превышена максимальная глубина стека. Доступно с PHP 5.3.0. JSON_ERROR_STATE_MISMATCH ( integer ) Неверный или поврежденный JSON. Доступно с PHP 5.3.0. JSON_ERROR_CTRL_CHAR ( integer ) Ошибка управляющих символов, вероятно, из-за неверного кодирования. Доступно с PHP 5.3.0. JSON_ERROR_SYNTAX ( integer ) Синтаксическая ошибка. Доступно с PHP 5.3.0. JSON_ERROR_UTF8 ( integer ) Поврежденные символы UTF-8, вероятно, из-за неверного кодирования. Доступно с PHP 5.3.3. JSON_ERROR_RECURSION ( integer ) Объект или массив, переданный в функцию json_encode() включает рекурсивные ссылки и не может быть закодирован. Если была передана опция JSON_PARTIAL_OUTPUT_ON_ERROR , то на месте рекурсивных ссылок будет выведен NULL . Доступно с PHP 5.5.0. JSON_ERROR_INF_OR_NAN ( integer ) Значение, переданное в функцию json_encode() , включает либо NAN , либо INF . Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR , то вместо указанных особых значений будет выведен . Доступно с PHP 5.5.0. JSON_ERROR_UNSUPPORTED_TYPE ( integer ) В функцию json_encode() было передано значение неподдерживаемого типа, например, resource. Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR , то вместо неподдерживаемого значения будет выводиться NULL . Доступно с PHP 5.5.0. JSON_ERROR_INVALID_PROPERTY_NAME ( integer ) В строке переданной в json_decode() был ключ, начинающийся с символа u0000. Доступно с PHP 7.0.0. JSON_ERROR_UTF16 ( integer ) Один непарный суррогат UTF-16 в экранированной последовательности Unicode в строке JSON, переданной в json_decode() . Доступно с PHP 7.0.0.

Читайте также:  Газ на турбированный двигатель отзывы

Можно комбинировать следующие константы для передачи в json_decode() .

JSON_BIGINT_AS_STRING ( integer ) Декодирует большие целые числа в качестве исходного значения строки. Доступно с PHP 5.4.0. JSON_OBJECT_AS_ARRAY ( integer ) Преобразует объекты JSON в массив PHP. Эта опция может быть задана автоматически, если вызвать json_decode() указав вторым параметром TRUE . Доступно с PHP 5.4.0.

Следующие константы можно комбинировать для использования в json_encode() .

JSON_HEX_TAG ( integer ) Все кодируются в u003C и u003E. Доступно с PHP 5.3.0. JSON_HEX_AMP ( integer ) Все & кодируются в u0026. Доступно с PHP 5.3.0. JSON_HEX_APOS ( integer ) Все символы ‘ кодируются в u0027. Доступно с PHP 5.3.0. JSON_HEX_QUOT ( integer ) Все символы " кодируются в u0022. Доступно с PHP 5.3.0. JSON_FORCE_OBJECT ( integer ) Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект, а массив пуст. Доступно с PHP 5.3.0. JSON_NUMERIC_CHECK ( integer ) Кодирование строк, содержащих числа, как числа. Доступно с PHP 5.3.3. JSON_PRETTY_PRINT ( integer ) Использовать пробельные символы в возвращаемых данных для их форматирования. Доступно с PHP 5.4.0. JSON_UNESCAPED_SLASHES ( integer ) Не экранировать /. Доступно с PHP 5.4.0. JSON_UNESCAPED_UNICODE ( integer ) Не кодировать многобайтовые символы Unicode (по умолчанию они кодируются как uXXXX). Доступно с PHP 5.4.0. JSON_PARTIAL_OUTPUT_ON_ERROR ( integer ) Позволяет избежать возникновения ошибок при использовании функции json_encode. Осуществляет подстановку значений по умолчанию вместо некодируемых. Доступно с PHP 5.5.0. JSON_PRESERVE_ZERO_FRACTION ( integer ) Гарантирует, что значение типа float будет преобразовано именно в значение типа float в случае, если дробная часть равна 0. Доступно с PHP 5.6.6. JSON_UNESCAPED_LINE_TERMINATORS ( integer ) Символы конца строки не будут экранироваться, если задана константа JSON_UNESCAPED_UNICODE . Поведение будет таким же, какое оно было до PHP 7.1 без этой константы. Доступно с PHP 7.1.0.

Читайте также:  Укажите неверный тип выравнивания в ms word

Следующие константы можно комбинировать для использования в json_encode() .

JSON_INVALID_UTF8_IGNORE ( integer ) Игнорировать некорректные символы UTF-8. Доступно с PHP 7.2.0. JSON_INVALID_UTF8_SUBSTITUTE ( integer ) Преобразовывать некорректные символы UTF-8 в xfffd (Символ Юниокда ‘REPLACEMENT CHARACTER’) Доступно с PHP 7.2.0. JSON_THROW_ON_ERROR ( integer ) Выбрасывается исключение JsonException в случае возникновения ошибок вместо установки глобального состояния ошибки, которое может быть получено с помощью функции json_last_error() и json_last_error_msg() . Константа JSON_PARTIAL_OUTPUT_ON_ERROR имеет приоритет над JSON_THROW_ON_ERROR . Доступно с PHP 7.3.0.

На шаге 3 json_last_error возвращает 3 ( JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded )

Класс:

Функция AJAX:

Запрос AJAX (loadmore.php):

Что я пробовал:

Этот фрагмент кода

работает отлично. Это заставило бы меня поверить, что AJAX мешает декодированию.

Я также попытался изменить $json = json_decode($json_str, true); $json = json_decode(utf8_encode($json_str), true); и ничего не меняется.

ПРИМЕЧАНИЕ: предложение сделать свойства класса общедоступными НЕ является решением

Этот снимок экрана показывает arg $ json_str, который отправляется в decodeJSON ($ json_str) и код ошибки.

3 ответа

Причина JSON_ERROR_CTRL_CHAR

Причина, по которой он возвращает JSON_ERROR_CTRL_CHAR , не в кодировке символов (то есть, utf8 или iso). Эта ошибка возникает, когда данные были неправильно закодированы, а полученная строка недопустима в формате JSON. Если вы смешиваете одинарные кавычки и двойные кавычки, это также может помешать процессу кодирования, важно быть последовательным.

С этим, как говорится,
Скорее всего, он возвращает ошибку, потому что вы не отправляете никаких фактических данных. Вы отправляете пустую строку через запрос. Ну, не совсем, вы на самом деле отправляете строку

который затем становится

в вашем loadmore.php. Но все равно было бы пусто, если бы вы использовали правильный тег php Потому что вы ничего не повторяете.

к правильному тегу php, а также убедитесь, что вы действительно что-то выводите, иначе stream будет просто пустой строкой.

Читайте также:  G3260 intel hd graphics

И это должно работать правильно.

Разнообразный

Как правило, при отправке данных через AJAX вы должны encodeURIComponent() чтобы исключить любые специальные символы.

.live испорчен

Функция .live устарела с .live 1.7, теперь вы должны использовать функцию .on для присоединения обработчиков событий. В вашем случае вам лучше использовать сокращенную функцию .click() .

ссылки должны иметь href

Имена файлов

Когда вы называете свои файлы, старайтесь не использовать периоды stream.class.php , они ожидают происшествия. Некоторые системы (особенно старые) не будут интерпретировать их должным образом, и вам будет трудно переименовать их все. Стандартное соглашение предлагает использовать подчеркивание или дефис для стабильных файловых систем.

Это работает на моем конце (со всеми файлами в одной папке)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector