我正在尝试通过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]));
答案 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? p>
答案 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);
}
}
问题解决了:)