【问题标题】:Check if parameters exist in an URL检查 URL 中是否存在参数
【发布时间】:2011-07-18 14:47:59
【问题描述】:

如何检查 URL 中是否包含参数?

例如,如果字符串是这样的,

form_page_add.php?parent_id=1

return true

但如果是这样的话,

form_page_add.php?

return nothing

谢谢。

编辑:

抱歉,不清楚,URL 是从 from 作为字符串提交的。我会将该字符串存储在一个变量中,

if(isset($_POST['cfg_path'])) $cfg_path = trim($_POST['cfg_path']);

所以我需要检查这个变量$cfg_path whether 是否有参数。

【问题讨论】:

  • 这个 URL 是客户端请求的(即通过 $_GET 访问),还是一个字符串?
  • 对不起,它是在一个字符串中,但不是通过 $_GET
  • 要么乔恩的答案是正确的,要么你的问题写得不好!

标签: php url parameters


【解决方案1】:

你可以使用这个简单的功能:

function url_get_param($url, $name) {
    parse_str(parse_url($url, PHP_URL_QUERY), $vars);
    return isset($vars[$name]) ? $vars[$name] : null;
}

See it in action here.

如果url中存在,则返回参数的值,如果根本不出现,则返回null。您可以通过相同的运算符(三等号,===)区分没有值和根本不出现的参数。

这将适用于您传递给它的任何 URL,而不仅仅是 $_SERVER['REQUEST_URI']

更新:

如果您只是想知道 URL 中是否有 任何参数,那么您可以使用上述的一些变体(请参阅 Phil 在 cmets 中的建议)。

或者,您可以使用非常简单的测试

if (strpos($url, '=')) {
    // has at least one param
}

我们甚至不需要在这里检查false,就好像等号存在一样,它不会是第一个字符。

更新 #2: 虽然使用 strpos 的方法适用于大多数 URL,但它不是防弹的,因此如果你不知道什么不应该使用您正在处理的 URL 类型。正如 Steve Onzra 在 cmets 中正确指出的那样,URL 像

http://example.com/2012/11/report/cGFyYW1fd2l0aF9lcXVhbA==

有效,但不包含任何参数。

【讨论】:

  • +1 我会扩展它以使 $name 可选。如果省略,返回$vars
  • @Phil:为了简单起见,我将保持代码不变,但这对于库函数来说是一个非常好的主意。
  • @Phil:好吧,如果你只想知道 url 中是否有 any 参数,你也可以使用strpos($url, '=') -- 技术含量低但效率高:)跨度>
  • @Jon 如果您希望它作为参数传递,那就是这样。它根据 RFC 有效:stackoverflow.com/questions/1856785/characters-allowed-in-a-url
  • @SteveOnzra:你说的太对了。每天都有新东西要学!
【解决方案2】:

另一种检查方法是使用parse_url() 方法。检查文档here。此函数将返回一个关联数组,其中包含一个包含 GET 参数的元素“查询”。

使用empty() 函数检查该字段是否为空。如果为空,则没有传递任何参数。

代码示例 -

<?php

    $url = "http://www.sub.domain.com/index.php?key=value&key2=value2";
    print_r(parse_url($url));
?>

输出

Array
(
    [scheme] => http
    [host] => www.sub.domain.com
    [path] => /index.php
    [query] => key=value&key2=value2
)

【讨论】:

    【解决方案3】:

    还可以使用 array_key_exists() 查找特定键,例如

    if(array_key_exists('some-key', $_GET))
    

    http://php.net/manual/en/function.array-key-exists.php

    【讨论】:

      【解决方案4】:

      如果您正在寻找是否存储为字符串的 URL(而不是被调用以调用 PHP 脚本的 URL),您可以使用 strpos()

      因此,您将能够在字符串中搜索出现的 ?,然后适当地处理它。例如:

      $pos = strpos($myString, "?");
      if($pos && $pos<strlen($myString){
          //deal with URLs with parameters
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多