【问题标题】:Php serialize and unserialize through form POSTphp通过表单POST进行序列化和反序列化
【发布时间】:2014-03-15 15:04:10
【问题描述】:

我已将许多隐藏表单输入设置为具有序列化数组的值,如下例所示:

echo "<input type=\"hidden\" name=\"attName\" value=\"".htmlentities(serialize($attributeName))."\" />";

接收表单post成功的脚本获取序列化数组。如果我打印出来:

echo "<p>".$_POST['attType']."</p>";

打印出来:
a:4:{i:0;s:13:\"序列号\";i:1;s:5:\"works\";i:2;s:3:\"Gen\";i: 3;s:4:\"测试\";}

这是有效的,而且似乎工作正常。

但是,如果我尝试反序列化它,似乎什么也没有发生。这段代码:

$attName=$_POST['attName'];
echo $attName;
$attName=unserialize($attName);
echo "Array: ";
print_r($attName);

打印出来:
a:4:{i:0;s:13:\"序列号\";i:1;s:5:\"works\";i:2;s:3:\"Gen\";i: 3;s:4:\"test\";}数组:

由于某种原因,php 无法对其进行反序列化。我尝试使用表单对第一页上的数组进行序列化和反序列化以尝试查找错误,但效果很好。

最奇怪的是,这个问题只发生在我的服务器上,而不发生在我的 MAMP 测试环境中。

非常感谢任何帮助。

【问题讨论】:

    标签: php arrays serialization


    【解决方案1】:

    magic_quotes_gpc 开启了吗? http://in1.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc

    警告 此功能自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已移除。 为 GPC(Get/Post/Cookie)操作设置 magic_quotes 状态。当 magic_quotes 打开时,所有 ' (单引号)、"(双引号)、\(反斜杠)和 NUL 会自动用反斜杠转义。

    如果打开,所有收到的表单发布数据都会使用“\”自动转义。建议关闭magic_quotes_gpc。

    【讨论】:

      【解决方案2】:

      更改您的代码并使用stripslashes

      $attName= stripslashes($_POST['attName']);
      echo $attName;
      $attName=unserialize($attName);
      echo "Array: ";
      print_r($attName);
      

      PHP.NET

      【讨论】:

        猜你喜欢
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多