我正在尝试通过网址传递数组。我已经尝试过编码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(最佳%20Way)%22; .....
有谁知道为什么会这样?我可以var_dump整个数组(并查看页面上的字符串计数)但我似乎无法在数组中打印单个值。它可能与URL中的问题和字符串长度的打印有关吗?
谢谢!
答案 0 :(得分:3)
因为您正在使用serialize()
。您应该使用urlencode()
代替。
serialize旨在获取内部任意数据结构,并将它们编码为可移植格式,以便在其他地方的PHP系统中重用。它确实 NOT 生成在URL上下文中保证有效的代码。基本上你是用锤子砸螺丝。请改用螺丝刀。
请注意,urlencode不接受数组。或许http_build_query()
更合适
答案 1 :(得分: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
数组。