【问题标题】:PHP Serialize & UnserializePHP序列化和反序列化
【发布时间】:2012-06-05 17:41:20
【问题描述】:

我遇到了反序列化的问题,它在从 $_POST 获取它后什么都不返回。我从表单中发布了一个简单的数组,我可以看到在序列化字符串中添加了双引号。我在序列化和反序列化之前尝试了stripslashes,但结果是相同的,没有输出。我已经在 php.ini 中关闭了 magic_quotes_gpc,但又没有运气。当我通过手动添加“\”对反序列化中的值进行硬编码时,给了我所需的字符串,所以我尝试了添加斜杠,但又一无所获。请帮我解决这个问题。

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

在序列化的stripslashes之后: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:\"值2\";} ");

我将输出作为 Array ( [key1] => value1 [key2] => value2 )

谢谢

【问题讨论】:

  • 反序列化($trp); ?也许反序列化($tmp); ?还是只是复制过去的错误?
  • 您确定将双引号添加到序列化字符串中,而不是在流程的早期添加到$_POST?如果您可以在每个步骤中发布输出(发送的内容、$_POST['whatever']serialize(...)unserialize(...) 等,这将有所帮助

标签: php


【解决方案1】:

在您的代码中:

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

【讨论】:

  • 感谢 Jack 成功了,我松了一口气。我是 php 新手,刚开始自学。几乎我所有的学习都是通过这个论坛和以前在这里回答的问题。非常感谢各位的帮助。
【解决方案2】:

这是笔误吗?

$tmp = $_POST["strVid"];

$myNewArray = unserialize($trp);

$trp != $tmp

【讨论】:

  • Jakub & Kakawait 这是一种类型,因为我尝试了太多太多的东西并且有点生气..
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多