Base64 Декодирование в php с помощью json_decode

Привет, у меня есть следующая проблема, когда в некоторых случаях json_decode не работает, и я получаю пустой массив следующим образом.

// for test purpose set the inbound enc parameter $_POST["enc"] = "eyJ0cmFuc2NyaXB0IjoiLSAgICAgICAgICBQYXN0ZWQgdGhlIHRleHQgaW50byBOb3RlcGFkIBMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzIiwiaWQiOjcwLCJpc0FjdGlvbmVkIjp0cnVlLCJ1c2VyX2lkIjoxLCJ0YXNrX3R5cGVfaWQiOjEsImFjY291bnRfaWQiOjIxLCJhY2NvdW50X25hbWUiOiJURVNUIiwiZXZlbnRfZGF0ZSI6bnVsbH0="; $decoded = base64_decode($_POST["enc"]); $ar = (array)json_decode($decoded); echo "<pre>"; print_r($decoded); echo "</pre>"; echo "<pre>"; print_r($ar); echo "</pre>"; 

$decoded отображается как строка json, но $ar имеет значение null .

Любая помощь, пожалуйста, будет оценена, помогая мне в этом вопросе.

Related of "Base64 Декодирование в php с помощью json_decode"

Принимая ваш код и расшифровывая строчную кодировку Base64, оказывается, что у вас есть символ ASCII CHR(13) в ваших данных JSON, что приводит к отказу JSON от проверки в соответствии с JSON Lint . Взятие этого символа приводит к правильному анализу JSON.

PHP Fiddle

Декодированные данные JSON:

 { "transcript": "- Pasted the text into Notepad no special characters", "id": 70, "isActioned": true, "user_id": 1, "task_type_id": 1, "account_id": 21, "account_name": "TEST", "event_date": null } 

HEX Редактор Скриншот:
Скриншот редактора HEX Editor

Ошибка в вашем JSON – как ни странно, в двух пробелах между «Блокнотом» и «Нет».

Похоже, что между этими пространствами существует нестандартный символ. Удалите этот символ, и JSON действителен.

Инвалид

 {"transcript":"- Pasted the text into Notepad no special characters","id":70,"isActioned":true,"user_id":1,"task_type_id":1,"account_id":21,"account_name":"TEST","event_date":null} 

действительный

 {"transcript":"- Pasted the text into Notepad no special characters","id":70,"isActioned":true,"user_id":1,"task_type_id":1,"account_id":21,"account_name":"TEST","event_date":null} 

В будущем вы идеально использовали бы json_encode для создания строки JSON . Функция автоматически удалит любые недействительные символы для вас.

Вы не предоставили второй параметр в json_decode для возврата в качестве массива, а не для объекта

 // for test purpose set the inbound enc parameter $_POST["enc"] = "eyJ0cmFuc2NyaXB0IjoiLSAgICAgICAgICBQYXN0ZWQgdGhlIHRleHQgaW50byBOb3RlcGFkIBMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzIiwiaWQiOjcwLCJpc0FjdGlvbmVkIjp0cnVlLCJ1c2VyX2lkIjoxLCJ0YXNrX3R5cGVfaWQiOjEsImFjY291bnRfaWQiOjIxLCJhY2NvdW50X25hbWUiOiJURVNUIiwiZXZlbnRfZGF0ZSI6bnVsbH0="; $decoded = base64_decode($_POST["enc"]); $ar = json_decode($decoded, true); //<-- Now returned as an array, and not an object echo "<pre>"; print_r($decoded); echo "</pre>"; echo "<pre>"; print_r($ar); echo "</pre>"; 

Вывод

 {"transcript":"- Pasted the text into Notepad no special characters","id":70,"isActioned":true,"user_id":1,"task_type_id":1,"account_id":21,"account_name":"TEST","event_date":null}