0

这是我的代码。

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

不适用于反序列化功能。请帮忙!

4

3 回答 3

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 个字符,但它没有。

于 2013-01-02T23:56:45.910 回答
4

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

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

在偏移量 199 处,您会看到

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

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

于 2013-01-02T23:56:06.303 回答
-1
 $a = serialize($data);
 $x = unserialize($a);
于 2013-01-02T23:51:55.253 回答