Php通过表单POST序列化和反序列化

时间:2014-03-15 15:04:10

标签: php arrays serialization

我设置了一些隐藏的表单输入,以获得序列化数组的值,如下例所示:

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

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

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

打印出来:
a:4:{i:0; s:13:\&#34;序列号\&#34 ;; i:1; s:5:\&#34;作品\&#34 ;; i:2; S:3:\&#34;根\&#34 ;; I:3; S:4:\&#34;测试\&#34 ;;}

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

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

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

打印出来:
a:4:{i:0; s:13:\&#34;序列号\&#34 ;; i:1; s:5:\&#34;作品\&#34 ;; i:2; S:3:\&#34;根\&#34 ;; I:3; S:4:\&#34;测试\&#34 ;;}阵列:

出于某种原因,php无法对其进行反序列化。我尝试在第一页上使用表单序列化和反序列化数组,以尝试查找错误,但它运行正常。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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用自动反斜杠&gt;进行转义。

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

答案 1 :(得分:0)

更改您的代码并使用stripslashes

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

PHP.NET