这可能是重复的,但我找不到任何有帮助的人。
我正在尝试将所有数据的数组传递到另一个页面,通过表单的post方法。它看起来像这样:
<form method="post" action="../resource_load/export.php" target="_blank">
<input type="hidden" name="tipo" value="<?=$_GET['tipo']?>">
<input type='hidden' name='excel_array' value='<?php echo htmlentities(serialize($_SESSION['excel_array']))?>'>
<input type='submit' class='submit' id='btnExport' value='Export to Excel' />
所以这里我序列化$ _SESSION数据。这就是它的样子:
value="a:1:{s:12:"dpi_strategy";a:1:{s:5:"Plan1";a:1:{i:0;a:9:{i:0;s:3:"PCR";i:1;s:11:"Description";i:2;s:4:"Task";i:3;s:8:"Resource";i:4;s:13:"Baseline Plan";i:5;s:10:"Trend Date";i:6;s:4:"User";i:7;s:20:"Data Inicialização";i:8;s:6:"Status";}}}}
这是我反序列化的地方:
$Excel_array = htmlentities(unserialize($_POST['excel_array']));
然而,它返回null。那是为什么?
答案 0 :(得分:1)
如果您这样做,请使用htmlentities()
进行编码,并html_entity_decode()
使用原始值进行解码。
其次,我不相信输出序列化和反序列化用户提交数据的数据是个好主意。原因是代码注入是一个主要的安全问题。
相反,请使用json_encode()
和json_decode()
。
现在,因为我看到你的数组Data Inicialização
中有特殊的字符,你将这些字符转换为另一个实体是正确的,但是如果你拥有UTF-8的所有内容,那么就可以了。
<input type='hidden' name='excel_array' value='<?php echo json_encode($_SESSION['excel_array']) ?>'>
和
# ../resource_load/export.php
var_dump(json_decode($_POST['excel_array']);
答案 1 :(得分:0)
<?php
$temp = array();
$temp['aaa'] = "aaaaaaaaaaaaaaaaaaaaaaa";
$temp['bbb'] = "bbbbbbbbbbbbbbbbbbbbbbb";
$temp['ccc'] = "ccccccccccccccccccccccc";
$arr = array();
$arr['excel_array'] = $temp;
?>
<form method="post" action="">
<input type='hidden' name='excel_array' value='<?php echo htmlentities(serialize($arr['excel_array']))?>'>
<input type='submit' class='submit' id='btnExport' value='Export to Excel' />
</form>
<?php
if( isset($_POST['excel_array']) ) {
echo "<pre>";
$Excel_array = unserialize($_POST['excel_array']);
print_r($Excel_array);
}
?>
从反序列化中删除htmlentities,因为您将反序列化数组并且htmlentities使用字符串