【问题标题】:PHP to check if a URL contains a query stringPHP 检查 URL 是否包含查询字符串
【发布时间】:2011-10-23 03:52:27
【问题描述】:

这很简单。似乎有很多解决方案可以确定 URL 是否包含特定的键或值,但奇怪的是我找不到确定 URL 是否有查询的解决方案。

使用 PHP,我只想检查当前 URL 是否有查询字符串。例如:http://abc.com/xyz/?key=valueVS。 http://abc.com/xyz/

【问题讨论】:

    标签: php


    【解决方案1】:

    对于任何作为字符串的 URL:

    if (parse_url($url, PHP_URL_QUERY))
    

    http://php.net/parse_url

    如果是当前请求的URL,简单:

    if ($_GET)
    

    【讨论】:

    • 那行得通。我正在尝试if (isset($_SERVER['QUERY_STRING'])) {echo 'has string';} else {echo 'no string';},但没有运气。谢谢!
    • 注意(为其他人节省一些时间):'just' if ($_GET)(对于当前请求)有效,因为在布尔 if($x) 上下文中空数组是 false。见:php.net/manual/en/types.comparisons.php 所以确实不需要count()empty()
    【解决方案2】:

    最简单的方法可能是检查$_GET[] 是否包含任何内容。这可以通过empty() 函数来完成,如下所示:

    if(empty($_GET)) {
        //No variables are specified in the URL.
        //Do stuff accordingly
        echo "No variables specified in URL...";
    } else {
        //Variables are present. Do stuff:
        echo "Hey! Here are all the variables in the URL!\n";
        print_r($_GET);
    }
    

    【讨论】:

      【解决方案3】:

      parse_url 在大多数情况下似乎是合乎逻辑的选择。但是我想不出“?”的情况。在 URL 中不会表示查询字符串的开头,因此对于(非常小的)性能提升,您可以使用

      return strpos($url, '?') !== false;

      超过 1,000,000 次迭代,strpos 的平均时间约为 1.6 秒,而 parse_url 为 1.8 秒。话虽如此,除非您的应用程序正在检查数百万个 URL 中的查询字符串,否则我会选择 parse_url

      【讨论】:

        【解决方案4】:

        像这样:

        if (isset($_SERVER['QUERY_STRING'])) {
        
        }
        

        【讨论】:

        • 你会想的。但是当我做一个像if (isset($_SERVER['QUERY_STRING'])) { echo 'has string'; } else {echo 'no string';} 这样的测试时,我得到上面两个示例网址的“有字符串”。
        • 总是存在 $_SERVER['QUERY_STRING'],无论 url 中是否有查询字符串。你必须做if ($_SERVER['QUERY_STRING'] !== '') { echo 'has string' }
        • 啊。感谢那里的解释。
        猜你喜欢
        • 1970-01-01
        • 2011-05-14
        • 2013-02-07
        • 2012-03-28
        • 2012-01-05
        • 2012-06-23
        • 2012-02-21
        • 2021-09-15
        • 2014-03-03
        相关资源
        最近更新 更多