json_decode — искажающая строка вместо возврата null

Одна часть моего приложения проверяет, может ли строка быть декодирована, и если это так, она перезаписывает переменную с декодированным значением:

if (json_decode($value, true)) {
$value = json_decode($value, true);
}

На одном из моих серверов, если я передам строку «123-555-6789», он будет обрабатывать его как действительный json, но возвращает только строку «123». Если вместо этого номер телефона ограничен символом точки: «123.555.6789», json_decode вернет «123.555». Даже когда это происходит, json_last_error говорит мне, что ошибок не было.

Я подумал, что это ошибка, потому что сервер с этой проблемой работал более старый php. Но затем я обновил его так, чтобы он был той же версии, что и сервер, который возвращает правильное значение (NULL). Это не решило проблему. Работает сервер с PHP версии 5.5.12. Сервер, который имел php 5.2 и теперь имеет 5.5.17, изменяет значения. Сервер, который выдает ожидаемый результат — Windows, сломанный — Ubuntu. Хотя я не думаю, что это будет иметь значение.

Есть ли в php.ini параметр конфигурации или что-то, что я должен отключить, чтобы это изменить? что-то вроде: fundamentally_break_json = 1?

2

Решение

На самом деле, я считаю, что реализация UBUNTU является правильной. json_decode сообщает вам, где в строке происходит синтаксическая ошибка. То, что вы должны проверить, это json_last_error (), которая вернет JSON_ERROR_SYNTAX, чтобы вы знали, что строка искажена.

Если json_last_error () == JSON_ERROR_NONE, тогда вы можете свободно установить свое значение $.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector