PHP http_build_query()为数组get参数生成不正确的url
我可能发现了PHP函数http\u build\u query()的一个bug 我正在开发一个具有动态形式的搜索引擎,其中一些参数是数组 我只是使用http\u build\u query()从当前的$\u get获取查询url。 但在生成的新查询中,所有这些数组参数都会自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D”PHP http_build_query()为数组get参数生成不正确的url,php,arrays,url,get,Php,Arrays,Url,Get,我可能发现了PHP函数http\u build\u query()的一个bug 我正在开发一个具有动态形式的搜索引擎,其中一些参数是数组 我只是使用http\u build\u query()从当前的$\u get获取查询url。 但在生成的新查询中,所有这些数组参数都会自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D” $queryStr = http_build_query($_GET); 原始url &阵列名称%5B%5D= 从http\u build\u
$queryStr = http_build_query($_GET);
原始url
&阵列名称%5B%5D=
从http\u build\u query()获取的新查询字符串:
&阵列名称%5B0%5D=
这是什么原因?如何修复此问题?http\u build\u query()函数不是一个bug 通过URL传递get参数时,如:“arrayName[]=” 会回来的
Array
(
[arrayName] => Array
(
[0] =>
)
)
并从数组中生成url编码字符串,结果为:
&arrayName%5B0%5D=
解码后的结果如下:
arrayName[0]=
现在您可以看到0来自何处:)
无需修复此问题,您可以更改代码以传递arrayName的键,或者仍按原样使用它 请提供一个复制案例(例如,您看到问题所在的$\u GET的值)。似乎不太可能是个bug。如果我读对了,这是完全合理的。你的子数组不能有一个没有索引的值,所以它按照我的预期将索引放入。在应用函数之前,我从未操作过$\u GET的内容。那么为什么会自动添加索引0呢?抱歉,您的评论没有任何意义。请尝试
var\u dump($\u GET)
并查看它提供了什么。您将看到,已经为arrayName
项自动生成了索引。当您使用http\u build\u query
时,索引也会被放入,因为这是唯一有意义的事情。我不知道怎么解释这个。。。
arrayName[0]=