检查URL中是否存在参数。

4

如何检查URL中是否有参数?

例如,如果字符串像这样,

form_page_add.php?parent_id=1

return true

但如果是这样的话,

form_page_add.php?

return nothing

谢谢。

编辑:

抱歉表述不够清晰,URL以字符串形式从表单提交。我会将该字符串存储在变量中。

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

所以我需要检查这个变量$cfg_path是否在其中包含参数。


这个URL是客户端请求的URL(即通过$_GET访问),还是在字符串中? - Mark Eirich
抱歉,它是在字符串中而不是通过$_GET传递的。 - Run
要么Jon的答案是正确的,要么你的问题写得很糟糕! - Mark Eirich
4个回答

26

18
你可以使用这个简单的函数:
function url_get_param($url, $name) {
    parse_str(parse_url($url, PHP_URL_QUERY), $vars);
    return isset($vars[$name]) ? $vars[$name] : null;
}

点击此处查看示例

如果URL中存在参数,则返回该参数的值,如果不存在则返回null。你可以通过使用“严格相等”运算符(三个等号===)来区分参数没有值和根本不出现的情况。

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

更新:

如果您只想知道URL中是否存在任何参数,则可以使用上面提到的某种变体(请参见Phil在评论中的建议)。

或者,您可以使用出乎意料的简单测试

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

我们甚至不需要检查这里是否存在false,因为如果等号存在,它不会是第一个字符。

更新#2:尽管使用strpos的方法适用于大多数 URL,但它并非万无一失,因此如果您不知道正在处理哪种类型的URL,则不应使用。正如Steve Onzra在评论中正确指出的那样,像

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

这些是有效的,但不包含任何参数。


1
+1 我会将 $name 设为可选项。如果省略,则返回 $vars - Phil
1
@Phil:我会保留现有代码以保持简单,但这是一个非常好的库函数的想法。 - Jon
3
@Phil:如果你只想知道URL中是否有任何参数,你也可以使用strpos($url, '=')--虽然技术含量不高但很有效 :) - Jon
1
@Jon 如果你想将它作为参数传递,那么这是有效的,符合RFC规范:https://dev59.com/bnI-5IYBdhLWcg3wbXxN - Steve Tauber
1
@SteveOnzra:你说得太对了。每天都有新东西要学习! - Jon
显示剩余6条评论

3
另一种检查方法是使用parse_url()方法。在此处查看文档here。此函数将返回一个关联数组,其中包含一个元素'query',其中包含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
)

0

如果您想查找存储为字符串的URL(而不是调用以调用PHP脚本的URL),则可以使用strpos()

因此,您将能够搜索字符串以查找?的出现,并适当处理它。例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接