【问题标题】:http_build_query without value on parameters (null value)http_build_query 没有参数值(空值)
【发布时间】:2021-10-05 06:44:24
【问题描述】:

PHP 函数http_build_query 对于构建带有 GET 参数的 URL 非常方便。但有时我喜欢使用无值的“布尔”参数,如下所示:

/mypage?subscription-id=42&cancel-renewal

然后我用一个简单的isset 进行检查。我可以用http_build_query 实现这个结果吗?

编辑:为参数分配空值似乎不起作用:

  • cancel-renewal => '' 导致 cancel-renewal=
  • cancel-renewal => null 导致参数被省略
  • cancel-renewal => false 导致 cancel-renewal=0

【问题讨论】:

  • http_build_query 以关联数组的形式将数据保存在变量中,然后将其作为参数传递。在获取请求时,您需要在 url 中写入参数。您可以将empty value 分配给该键。
  • 我猜是$query['cancel-renewal'] = "";。我不确定..
  • @AaronJonk 这导致cancel-renewal=
  • 这有什么关系,它从未在任何地方看到过。 cancel-renewalcancel-renewal= 相同
  • 你得自己写替换函数,我不认为有什么办法可以让内置函数做你想做的事。

标签: php url null query-string


【解决方案1】:

我可以用 http_build_query 实现这个结果吗?

没有。无论参数的值是什么,在内部 http_build_query 都会附加 = 键值分隔符。 可以看源码here(PHP 7.3.3)

意味着您要么需要接受参数的cancel-renewal= 外观,要么可能重新设计路径以具有类似/mypage/cancel-renewal?subscription-id=42 的内容

第三种选择是编写自己的简单函数来构建查询字符串。

【讨论】:

    【解决方案2】:

    使用这个;

    $query = array("subscription-id" => 42, "cancel-renewal" => "");
    $http_query = http_build_query($query);
    

    这将返回?subscription-id=42&cancel-renewal=。与isset() 完美配合

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2020-08-07
      相关资源
      最近更新 更多