PHP Serialize & Unserialize


PHP Serialize & Unserialize

我在反序列化方面遇到问题,从 $_POST 获得它后什么也没返回。我从表单中发布了一个简单的数组,我可以看到双引号已添加到序列化字符串中。我在序列化之前和取消序列化之前尝试了条形斜杠,但结果相同,没有输出。我已经在 php 中转过magic_quotes_gpc.ini再次没有运气。当我通过手动添加"''"对反序列化中的值进行硬编码时,给了我所需的字符串,所以我尝试使用添加斜杠,再次什么都没有。请帮我解决这个问题。

<?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''";}'");

我得到的输出是数组 ( [键 1] => 值 1 [键2] => 值 2 )

谢谢

在你的代码中:

<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"]);

这是错别字吗?

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

$trp != $tmp

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

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