PHP:json_decode 不工作

新手上路,请多包涵

不起作用

 $jsonDecode = json_decode($jsonData, TRUE);

但是,如果我从 $jsonData 复制字符串并手动将其放入解码函数中,它确实可以工作。

有效

 $jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);

我确实输出了 $jsonData 复制了它并像上面一样在解码函数中输入。然后它起作用了。但是,如果我将 $jsonData 直接放在解码功能中,则不会。

var_dump($jsonData) 显示:

 string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"

$jsonData 来自加密的 $_GET 变量。为了加密它,我使用这个:

 $key = "SOME KEY";

$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_ECB, $iv);

$iv = rawurlencode(base64_encode($iv));
$enc = rawurlencode(base64_encode($enc));

//To Decrypt
$iv = base64_decode(rawurldecode($_GET['i']));
$enc = base64_decode(rawurldecode($_GET['e']));

$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);

原文由 yoshi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 759
2 个回答

您很可能需要从解密数据中去除填充。您的字符串中有 124 个可见字符,但 var_dump 报告 144。这意味着需要删除 20 个填充字符(字符串末尾的一系列“\0”字节)。

可能是块末尾的 4 个“\0”字节 + 一个空的 16 字节块(标记数据的结尾)。

您目前如何解密/加密您的字符串?

编辑

您需要添加它以修剪字符串末尾的零字节:

 $jsonData = rtrim($jsonData, "\0");

原文由 laurent 发布,翻译遵循 CC BY-SA 3.0 许可协议

TL;DR 确保您的 JSON 不包含评论 :)

我从 API 参考中获取了一个 JSON 结构,并使用 Postman 测试了请求。我刚刚复制粘贴了 JSON,并没有注意到里面有评论:

 ...
"payMethod": {
    "type": "PBL" //or "CARD_TOKEN", "INSTALLMENTS"
},
...

当然,删除后评论 json_decode() 开始像魅力一样工作:)

原文由 Dzmitry Kulahin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏