为什么字符串长度显示在URL中?

时间:2013-06-27 15:53:29

标签: php arrays 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(最佳%20Way)%22; .....

有谁知道为什么会这样?我可以var_dump整个数组(并查看页面上的字符串计数)但我似乎无法在数组中打印单个值。它可能与URL中的问题和字符串长度的打印有关吗?

谢谢!

2 个答案:

答案 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数组。