Не работает json_decode()

147
20 августа 2019, 16:50

есть такой код:

$arParams = array("keys"=>"vals");
$key = md5('BqxhTvmEhbAKdG6P'."2");
$m_params = urlencode(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, json_encode($arParams), MCRYPT_MODE_ECB)));

Я беру массив и ключ, с помощью ключа кодирую этот массив, сначала через json_encode, потом через mcrypt_encrypt, после через base64_encode и urlencode.

Теперь хочу вернуть все как было, пишу вот так:

$a = urldecode($m_params);
$a = base64_decode($a);
$a = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,$a,MCRYPT_MODE_ECB);

В $a у меня должна быть корректная json строка, но json_decode($a) возвращает NULL. В поисках проблемы я написал вот такой код:

var_dump($a); 
echo("<br>");
var_dump(json_decode($a));
echo("<br>");
var_dump(mb_detect_encoding($a));
echo("<br>");
 switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - Ошибок нет';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Достигнута максимальная глубина стека';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Некорректные разряды или несоответствие режимов';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Некорректный управляющий символ';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Синтаксическая ошибка, некорректный JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Некорректные символы UTF-8, возможно неверно закодирован';
        break;
        default:
            echo ' - Неизвестная ошибка';
        break;
    }

Вот что получаю на выходе:

string(32) "{"keys":"vals"}"
NULL
string(5) "ASCII"
- Некорректный управляющий символ

Что это значит, как решить проблему? Я подозреваю, что в строке есть ещё какие-то данные, помимо видимых, потому что если просто взять и преобразовать массив в json, то строка получается в 2 раза меньше, хотя кодировка такая-же (ASCII):

var_dump(json_encode($arParams));

string(15) "{"keys":"vals"}"
READ ALSO
Рекурсивное сравнение массива ссылок

Рекурсивное сравнение массива ссылок

Учусь работать с массивами - загвоздка состоит в том что есть массив разных ссылок и хочу его отсортировать, а точнее перебрать с условием...

167
Как добавить модуль gearman в php на Winodws?

Как добавить модуль gearman в php на Winodws?

Windows хост в нем nginx/apache/phpЗадача: установить модуль gearman в php

174
Адрес страницы по типу &#39;?&#39;

Адрес страницы по типу '?'

Есть страница адрес которой, допустим vkcom/id в ней имеется разметка

151
php json вывести множество элементов из бд

php json вывести множество элементов из бд

В моем коде выводится только один первый встречаемый элемент из бд с определенным id_user, а мне нужно вывести все элементы с данным id_user через...

179