PHP序列化&反序列化

时间:2012-06-05 17:41:21

标签: php

我有Unserialize的问题,从$ _POST获取后没有返回任何内容。我从一个表单发布一个简单的数组,我可以看到双引号被添加到序列化的字符串。我在序列化之前和反序列化之前尝试过striplashes,但结果是相同的,没有输出。我已经在php.ini中转换了magic_quotes_gpc并再次没有运气。当我通过手动添加“\”对unserialize中的值进行硬编码时给了我想要的字符串,所以我尝试使用addslashes并再次没有任何东西。请帮我解决这个问题。

<?php


$tmp = $_POST["strVid"];

$myNewArray = unserialize($trp);
print_r($myNewArray);

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = serialize($myArray);
?>

<form  onsubmit="return validate(this)" action="test_serialize.php" method="post">
<input type="hidden" name="strVid1" value="this is mega shit"/>
<input type="hidden" name="strVid" value="<?php echo $serialized; ?>">
<input type="Submit" name="next" value="Next"/>

</form>

...更新

序列化之后:a:2:{s:4:“key1”; s:6:“value1”; s:4:“key2”; s:6:“value2”;}

在序列化的条带之后:a:2:{s:4:“key1”; s:6:“value1”; s:4:“key2”; s:6:“value2”;}

当我手动添加\

$ myNewArray = unserialize(“a:2:{s:4:\”key1 \“; s:6:\”value1 \“; s:4:\”key2 \“; s:6:\” value2 \“;}”);

我将输出作为数组([key1] =&gt; value1 [key2] =&gt; value2)

由于

3 个答案:

答案 0 :(得分:3)

在您的代码中:

<input type="hidden" name="strVid" value="<?php echo $serialized; ?>">

这肯定是错的,因为变量将包含双引号;你必须逃避:

<input type="hidden" name="strVid" value="<?php echo htmlspecialchars($serialized, ENT_QUOTES, 'UTF-8'); ?>">

顺便说一句,这假设您正在执行此操作以反序列化它:

$myNewArray = unserialize($_POST["strVid"]);

答案 1 :(得分:0)

这是一个错字吗?

$tmp = $_POST["strVid"];

$myNewArray = unserialize($trp);

$trp!= $tmp

答案 2 :(得分:0)

您是否尝试在序列化输入上使用urlencode?

http://php.net/manual/en/function.urlencode.php