我的PHP代码序列化,但不反序列化

时间:2013-01-02 23:48:53

标签: php serialization

这是我的代码。

$data = array(
        '24 Jan|8:30' => '12.6',
        '22 Feb|8:30' => '250',
        '11 Mar|8:10' => '0',
        '31 Apr|23:30' => '7',
        '32 Apr|23:30' => '80',
        '33 Apr|23:30' => '67',
        '34 r|23:30' => '45',
        '35 Ap|23:30' => '66',
        '34 Lr|23:30' => '23',
        '3 Apr|23:30' => '23'
    );

    //echo serialize($data);
    $x = unserialize('a:10:{s:12:"24 Jan|8:30 ";s:4:"12.6";s:12:"22 Feb|8:30 ";s:3:"250";s:12:"11 Mar|8:10 ";s:1:"0";s:12:"31 Apr|23:30";s:1:"7";s:12:"32 Apr|23:30";s:2:"80";s:12:"33 Apr|23:30";s:2:"67";s:12:"34 r|23:30 ";s:2:"45";s:12:"35 Ap|23:30 ";s:2:"66";s:12:"34 Lr|23:30 ";s:2:"23";s:12:"3 Apr|23:30 ";s:2:"23";}');
    var_dump($x);

在反序列化函数中不起作用。 请帮忙!

3 个答案:

答案 0 :(得分:4)

$ data的序列化表示和您尝试反序列化的字符串不同。

http://codepad.viper-7.com/3zlk1a

在偏移199处,您会看到

s:12:"34 r|23:30 "

但字符串(s)长度不是12个字符(这就是s:12:的意思)。我想有些东西直接修改了序列化字符串。只是不要这样做:)总是反序列化并使用结构化值。

答案 1 :(得分:4)

'a:10:{s:12:"24 Jan|8:30 ";s:4:"12.6";s:12:"22 Feb|8:30 ";s:3:"250";s:12:"11 Mar|8:10 ";s:1:"0";s:12:"31 Apr|23:30";s:1:"7";s:12:"32 Apr|23:30";s:2:"80";s:12:"33 Apr|23:30";s:2:"67";s:12:"34 r|23:30 ";s:2:"45";s:12:"35 Ap|23:30 ";s:2:"66";s:12:"34 Lr|23:30 ";s:2:"23";s:12:"3 Apr|23:30 ";s:2:"23";}'

...不是有效的序列化。具体来说,s:12:"34 r|23:30 ";段表示字符串34 r|23:30包含12个字符,而不是。

答案 2 :(得分:-1)

 $a = serialize($data);
 $x = unserialize($a);