2013-06-27 70 views
1

我想通過一個網址傳遞數組。我嘗試過對URL進行編碼,序列化URL,對URL進行序列化和編碼,無論我做什麼,字符串的長度都會在URL中出現。爲什麼字符串長度在URL中顯示?

例如,如果我這種方式傳遞數組通過URL:

<a href='http://splitsum.com/samples/your_store/checkout_form2.php?arr=<?PHP echo serialize($order); ?>'>Next Page</a> 

所得URL看起來像這樣(與串計數打印出來):

.... .s:15:%22shipping_method%22; s:20:%22Flat%20Rate%20(Best%20Way)%22; .....

有誰知道爲什麼會發生這種情況?我可以var_dump整個數組(並看到頁面上的字符串計數),但我似乎不能打印數組中的單個值。它可能與URL中的問題和打印字符串長度有關嗎?

謝謝!

+2

這就是['serialize'](http://php.net/serialize)的工作原理。這是它使用的格式。我建議使用['http_build_query'](http://php.net/http_build_query)來代替。 –

回答

0

長度顯示,因爲您使用serialize。它如何輸出。它用於存儲PHP變量,以便它可以重新加載到PHP中。它的輸出格式包含數組/字符串的長度。

這是此工作的錯誤工具。您想在此處使用http_build_query

<a href='http://splitsum.com/samples/your_store/checkout_form2.php?<?PHP echo http_build_query(array('arr' => $order)); ?>'>Next Page</a> 

然後$_GET['arr']checkout_form2.php將是您$order陣列。

+0

我想我可能說得太快....當我嘗試var_dump我只得到數組中的第一個值。任何想法爲什麼可能會發生?我確實看到了URL中的整個數組,所以數據確實通過了。 –

+0

您是否將您的代碼更改爲我的樣子?注意我是如何從URL中刪除'arr ='的。 –

+0

就是這樣!再次感謝! var_dump NOW打印出整個數組,但是當我嘗試打印數組的一個元素時,仍然會得到一個Null值。 –

3

因爲您使用的是serialize()。您應該使用urlencode()

序列化旨在採取內部任意數據結構,並將它們編碼爲可移植的格式,以便在其他地方的PHP系統中重用。它做不是產生的代碼在URL上下文中是有效的。基本上你用錘子敲一個螺絲。改用螺絲刀。請注意,urlencode不接受數組。也許http_build_query()會更合適

+0

剛剛嘗試http_build_query()並修復了問題!非常感謝! –

相關問題