Имя: Пароль:
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 назад
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn