【问题标题】:PHP http_build_query() generate incorrect url for array get parameterPHP http_build_query() 为数组获取参数生成不正确的 url
【发布时间】:2018-03-07 08:52:56
【问题描述】:

我可能发现了一个 PHP 函数 http_build_query() 的错误。

我正在开发一个动态形式的搜索引擎,其中一些参数是数组。

我只是使用 http_build_query() 从当前的 $_GET 获取查询 url。 但是所有这些数组参数在生成的新查询中自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D”

$queryStr = http_build_query($_GET);

原始网址

&arrayName%5B%5D=

从 http_build_query() 获得的新查询字符串:

&arrayName%5B0%5D=

这是什么原因?如何解决这个问题?

【问题讨论】:

  • 请提供一个复制案例(例如,您发现问题所在的 $_GET 的值)。似乎不太可能是一个错误。
  • 如果我没看错,那是完全合理的。您的子数组不能有没有索引的值,所以它按照我的预期放入索引。
  • 在应用该函数之前,我从未操作过 $_GET 的内容。那么怎么会自动添加索引 0 呢?
  • 抱歉,您的评论没有任何意义。
  • 试试var_dump($_GET);,看看它能给你什么。您会看到已经为arrayName 项目自动生成了一个索引(应该如此)。当您使用http_build_query 时,索引也会被放入,因为这是唯一有意义的事情。我不知道该怎么解释这个......

标签: php arrays url get


【解决方案1】:

这不是 http_build_query() 函数的错误。

当您通过 URL 传递 get 参数时,例如:“arrayName[]="

print_R($_GET);

会回来

Array
(
    [arrayName] => Array
        (
            [0] => 
        )

)

http_build_query从数组中生成url编码的字符串,结果为:

&arrayName%5B0%5D=

解码如下:

arrayName[0]=

现在你可以看到 0 是从哪里来的 :)

没有必要解决这个问题,您可以更改代码以传递数组名称的键,或者仍然按原样使用它。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2020-06-05
    • 2012-11-05
    • 2011-08-18
    相关资源
    最近更新 更多