2013-04-26 89 views
6

我想通过一个数组通过一个html格式的输入字段。 使用serialize传递它,然后反序列化以再次读取数组。我有多个输入字段。反序列化在9字节偏移量5的错误

$test = array('name' => 'Sander', 'type' => 'melon'); 

echo '<input type="hidden" name="rank[]" value="'.serialize($test).'" >'; 

然后如果我想反序列化,并显示它给出了一个错误的数据:

$list = $_POST['rank']; 
var_dump($list); 
var_dump(unserialize($list[0])); 

enter image description here

+0

[反序列化()\ [function.unserialize \]的可能重复:错误在偏移](http://stackoverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset) – Rikesh 2013-04-26 10:53:49

回答

0

而不是使用连载我只是用用urlencode()和urldecode()的。

将数组更改为不同的格式。

$info = 'name=Sander&type=melon'; 

echo '<input type="hidden" name="rank[]" value="'.urlencode($info).'" >'; 

然后,我可以简单地显示这样的值:

if(!empty($_POST['rank'])){ 

    $list = $_POST['rank']; 
    $listSize = count($list); 

    for($i=0;$i<$listSize;$i++){ 

     parse_str(urldecode($list[$i]), $output); 
     var_dump($output); 
    } 

} 

问题解决:)

0

这是因为当你在HTML输入添加序列化的数据,它会产生不良HTML标签

<input type="hidden" name="rank[]" value="a:2:{s:4:"name";s:6:"Sander";s:4:"type";s:5:"melon";}" > 

看到“展示位置。由于这是你的POST数据是不完整的

var_dump($_POST['rank']); 

产生

array(1) { 
    [0]=> 
    string(9) "a:2:{s:4:" 
} 

你为什么不尝试json_encode和json_decode?

+2

[JSON语法](http://www.w3schools.com/json/json_syntax.asp)对于字符串也使用双引号,所以你必须'urlencode()'来防止t他在这种情况下的行为也是如此。 – hexblot 2013-04-26 11:10:28

1

尝试

$list = urldecode($_GET['rank']); 
//var_dump($list); 
var_dump(unserialize($list)); 
$test = array('name' => 'Sander', 'type' => 'melon');?> 
<form > 
<input type='hidden' name='rank' value='<?php echo serialize($test);?>' > 
<input type="submit" > 
</form> 
+0

而不是阵列,我做了以下形式的字符串:“name = Sander&type = melon”。这工作! – Sharpless512 2013-04-26 12:12:36