2012-06-05 158 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