PHP:json_decode不起作用

2022-08-30 14:59:44

不起作用

$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);

答案 1

有一段时间会出现html实体的问题,例如\“它将表示如下\&quot,因此您必须需要将html entites解析为真实文本,您可以使用php的html_entity_decode()方法完成。

$jsonData = stripslashes(html_entity_decode($jsonData));

$k=json_decode($jsonData,true);

print_r($k);

答案 2

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

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

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

编辑

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

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

推荐