PHP:json_decode无效

 SCY瑶_450 发布于 2023-01-12 09:40

这并不能正常工作:

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

小智.. 50

有时候会出现html实体的问题,例如"它会像这样表示",所以你必须要将html entites解析为真实文本,你可以使用 php的html_entity_decode()方法.

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

$k=json_decode($jsonData,true);

print_r($k);

完善!在解决我的问题之前浪费了一个小时:) (2认同)


laurent.. 10

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

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

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

编辑:

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

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


dar7yl.. 5

从其他评论来看,你可以使用,

$ jsonDecode = json_decode(trim($ jsonData),TRUE);

3 个回答
  • 有时候会出现html实体的问题,例如"它会像这样表示",所以你必须要将html entites解析为真实文本,你可以使用 php的html_entity_decode()方法.

    $jsonData = stripslashes(html_entity_decode($jsonData));
    
    $k=json_decode($jsonData,true);
    
    print_r($k);
    

    2023-01-12 09:43 回答
  • 您很可能需要从解密数据中剥离填充.您的字符串中有124个可见字符,但var_dump报告144.这意味着需要删除20个填充字符(字符串末尾的一系列"\ 0"字节).

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

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

    编辑:

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

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

    2023-01-12 09:44 回答
  • 从其他评论来看,你可以使用,

    $ jsonDecode = json_decode(trim($ jsonData),TRUE);

    2023-01-12 09:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有