Имя: Пароль:
IT
Веб-мастеринг
PHP почему не срабатывает json_decode
0 vde69
 
08.01.23
18:13
не могу сообразить в чем проблема?

код
    try{
        $res = json_decode($data, true);
    }  catch (Exception $e) {
        echo '<br>===>>>ERROR';
        return false;
    }
    echo '<br>===>>>'.$data.' ===>>> '. json_encode($res);

выводит

===>>>{"id":"bfe5610e0698dd22828tdg","cap":5520,"seq":4,"ka_seq":35194,"lan_ablilty":1} ===>>> null

То есть не разбирает строку $data, вроде она правильная, онлайн проверку проходит.

пока приходят на ум только 3 мысли
1. строка не совсем строка (например нет нул терминатора)
2. в середине есть запрещенные и нечитаемые символы
3. что-то с кодировками не то

но не соображу как проверить....

ps
входящая строка это ответ от реальной железки, то есть я не сам ее выдумал...
1 Волшебник
 
модератор
08.01.23
18:29
напиши var_dump($data)
2 Asmody
 
08.01.23
18:35
попробуй https://www.php.net/manual/ru/function.json-last-error.php

оно расскажет, где оно нешмогла
3 vde69
 
08.01.23
18:39
спасибо помогло удаление неправильных символов в конце

json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data), true)
4 vde69
 
08.01.23
18:41
почитал, это проблема исходит от openssl_decrypt, это он при раскодировании может фигню накидывать в конец буфера
5 Asmody
 
08.01.23
18:44
(3) там есть флаг JSON_INVALID_UTF8_SUBSTITUTE вроде как для этого
6 Asmody
 
08.01.23
18:45
ну или JSON_INVALID_UTF8_IGNORE, чтобы вообще всё сразу отмести
7 vde69
 
08.01.23
19:13
(6) это не работает :) реально работает только (3)
8 Tarzan_Pasha
 
08.01.23
19:36
что это вы в мою профессию залезаете  - в php?  Вам 1с мало?
9 Волшебник
 
модератор
08.01.23
21:25
(8) Движок мисты написан на PHP. Мы его начали использовать, когда ты ещё худой был, лет 20 назад