unserialize错误,偏移量为5个字节

时间:2013-04-26 10:49:18

标签: php arrays serialization deserialization

我正在尝试通过html格式的输入字段传递数组。 使用序列化传递它然后反序列化再次读取数组。我有多个输入字段。

$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

4 个答案:

答案 0 :(得分:6)

在输出之前,您很可能需要通过urlencode()传递序列化字符串。

要处理它,请在unserialize()之前使用urldecode()

答案 1 :(得分: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>

答案 2 :(得分:0)

这是因为当您在html输入中添加序列化数据时,会产生格式错误的html标记

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

请参阅“展示位置。因此,您的帖子数据不完整

var_dump($_POST['rank']);

产生

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

为什么不试试json_encode和json_decode?

答案 3 :(得分: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);  
    }

}

问题解决了:)