为什么我的反序列化返回空?

时间:2016-09-12 16:53:08

标签: php session serialization

这可能是重复的,但我找不到任何有帮助的人。

我正在尝试将所有数据的数组传递到另一个页面,通过表单的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。那是为什么?

2 个答案:

答案 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使用字符串