PHP json_decode на Google App Engine - недействительное поведение - PullRequest
0 голосов
/ 30 апреля 2018

Я столкнулся со странной проблемой при использовании php json_decode в движке приложения Google. Для любой строки, начинающейся с числа, json_decode возвращает ответ, показывающий, что это была допустимая строка json, хотя это не так. Например, если я делаю json_decode ('508'), он возвращает 508. Если я делаю json_decode ('2018-04-30'), он возвращает 2018.

Может ли это быть проблема, связанная с механизмом приложений Google, с запуском php 'json_decode? потому что это просто отлично работает в php, когда он не запущен на google app engine.

1 Ответ

0 голосов
/ 30 апреля 2018

ТЛ; др

json_decode('2018-04-30') неверно и должно быть json_decode('"2018-04-30"')

Что-то поставляет плохой JSON на ваш PHP.


Как проверить наличие плохой строки JSON

$var = '2018-04-30';

// Note: $decoded_json will still be 2018 due to PHP's handling of string to int in this case but there will be a JSON error
$decoded_json = json_decode($var);

if(json_last_error() === JSON_ERROR_NONE)
{
    echo 'Good JSON!';
}
else
{
    echo 'Bad JSON: '.json_last_error_msg();

    // We can try wrapping the $var in double quotes to try and force good JSON since the data source is untrusted
    $decoded_json = json_decode('"'.$var.'"');

    if(json_last_error() === JSON_ERROR_NONE)
    {
        echo 'Fixable JSON!';
    }
    else
    {
        echo 'Really bad JSON: '.json_last_error_msg();
    }
}

json_decode('2018-04-30') дает 2018, поскольку 2018-04-30 не заключено в кавычки и преобразуется в целое число в меру возможностей PHP. Попробуйте это, чтобы лучше понять поведение PHP:

echo (int)'2018-04-30';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...