2012-06-05 156 views
1

我有Unserialize问题,它从$ _POST获取后什么也不返回。我从一个表单发布一个简单的数组,我可以看到双引号被添加到序列化的字符串。在序列化之前和反序列化之前,我尝试了stripslashes,但结果与没有输出相同。我在php.ini中变成了magic_quotes_gpc,再次没有运气。当我通过手动添加“\”来硬编码值时,给我所需的字符串,所以我试着用addslashes并再次没有任何东西。请帮我解决这个问题。PHP序列化和反序列化

<?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> 

更新...

序列化后:一个: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 =反序列化(” A:2:{S:4:\ “KEY1 \”; S:6:\ “VALUE1 \”; S:4 :\“key2 \”; s:6:\“value2 \”;}“);

我得到的输出作为阵列([KEY1] =>值1 [KEY2] =>值2)

由于

+0

反序列化($ TRP); ?也许反序列化($ tmp); ?或者只是复制过去的错误? – Kakawait

+0

你确定双引号被添加到序列化的字符串,而不是在'$ _POST'的过程中?如果你可以在每一步发送输出(正在发送什么,'$ _POST ['whatever']','serialize(...)','unserialize(...)'等,这将有助于帮助 – jedwards

回答

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

谢谢杰克做了技巧,我感到宽慰我是PHP新手,刚开始自己​​学习,几乎所有的学习都是通过这个论坛,之前在这里回答了问题,真的很感谢帮助的人。 – Questions

0

这是一个错字?

$tmp = $_POST["strVid"]; 

$myNewArray = unserialize($trp); 

$trp!= $tmp

+0

Jakub& Kakawait这是一个类型,因为我已经尝试了太多的东西,有点愤怒.. – Questions

+0

typ'e'?或Typ'o'? – Jakub

+0

哈哈它的错字..看到我真的走了生气 – Questions