6

我正在尝试通过 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]));

在此处输入图像描述

4

4 回答 4

6

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

要处理它,请使用urldecode()before unserialize()

于 2013-04-26T10:52:21.473 回答
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>
于 2013-04-26T11:18:50.903 回答
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 ?

于 2013-04-26T11:06:56.660 回答
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);  
    }

}

问题解决了:)

于 2013-04-29T09:30:30.347 回答