我正试图通过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和字符串长度的打印问题有关?
谢谢!
发布于 2013-06-27 15:59:56
长度之所以出现是因为您使用的是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'] in checkout_form2.php将是您的$order数组。
发布于 2013-06-27 15:56:04
因为你在使用serialize()。您应该使用urlencode()代替。
序列化的目的是获取内部任意数据结构,并将其编码为可移植格式,以便在其他地方的PHP系统中重用。它不会产生在URL上下文中保证有效的代码。基本上你是用锤子敲击螺丝。用螺丝刀代替。
注意,urlencode将不接受数组。也许http_build_query()会更合适
https://stackoverflow.com/questions/17347766
复制相似问题