【问题标题】:How to check wether an URL already has a parameter inside it?如何检查 URL 中是否已经有参数?
【发布时间】:2011-04-21 18:44:45
【问题描述】:

使用 PHP 我需要检查我要附加信息的 URL 是否已经有参数。

所以如果网址是

http://test.com/url?a=1

我需要加上 &b=2,即

http://test.com/url?a=1&b=2

但是如果 URL 是

http://test.com/url

我需要追加

http://test.com/url?b=2

是否可以在 PHP 中进行检查?总之,我需要使用正确的分隔符附加 b=2 参数(“?”如果现有链接中没有,或者“&”如果现有链接中已经有“?”)。

【问题讨论】:

    标签: php append


    【解决方案1】:

    不要检查而是组装一个新的
    使用 $_GET 数组和 http_build_query() 函数

    【讨论】:

    • 好的,谢谢,有趣的想法!我以前没有使用过 _GET 数组,我将如何使用它,记住我不知道它可以将 URL 分成多少部分?
    • @kitenski 你不必关心。它会自动完成。
    • 好的,谢谢,请原谅我的无知,但是你能给我一个例子来说明 _GET 数组是如何工作的吗??
    • @kitenski 是针对当前正在处理的还是针对存储在变量中的某个 URL?如果后者 - 使用丹尼斯的回答
    • 它已经存储在数据库中,所以我可以将它读入变量,因此将使用丹尼斯的回答,非常感谢及时跟进
    【解决方案2】:

    您可以使用parse_url()。 然后使用parse_str()获取查询片段,修改数组并使用http_build_query()重新创建查询字符串。

    【讨论】:

      【解决方案3】:

      使用此函数,您可以调用set('b', 2) 或使用set(array('a' => 1, 'b' => 2, 'c' => 3)) 一次设置多个值。

      function set($name, $value='', $vars='') {
          if (!$vars) $vars = $_SERVER['QUERY_STRING'];
          parse_str($vars, $a);
          if (!is_array($name)) $name = array($name => $value);
          foreach ($name as $k => $v) {
              $a[$k] = $v;
              if ($v === '') unset($a[$k]);
          }
          $q = '';
          foreach ($a as $k => $v) $q .= ($q ? '&' : '') . $k . '=' . $v;
          return $q ? '?' . $q : '';
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-14
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多