2013-01-02 40 views
0

這是我的代碼。我的PHP代碼序列化,但不反序列化

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

不能在反序列化函數中工作。 請幫忙!

+0

http://stackoverflow.com/questions/8641889/how-to-use-php-serialize-and-unserialize的可能重複 –

回答

-1
$a = serialize($data); 
$x = unserialize($a); 
4

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

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

在偏移199你看到

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

但是字符串(s)並不長12個字符(那什麼s:12:平均值)。我想直接修改序列化的字符串。只是不要這樣做:)總是反序列化並使用結構化值。

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個字符,但不包含該字符。