检查URL中是否存在参数

时间:2011-03-19 04:13:48

标签: php url parameters

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

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

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 whether中是否有参数。

4 个答案:

答案 0 :(得分:25)

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

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

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

答案 1 :(得分:18)

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

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。您可以通过相同的运算符(三等于===)来区分没有值且完全不出现的参数。

这适用于您传递的任何网址,而不仅仅是$_SERVER['REQUEST_URI']

<强>更新

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

或者,您可以使用令人惊讶的简单测试

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

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

更新#2 虽然使用strpos的方法适用于大多数网址,但它不是防弹的,所以如果不这样做则不应该使用知道你正在处理什么样的网址。正如Steve Onzra在评论中正确指出的那样,网址如

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

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

答案 2 :(得分:3)

另一种检查方法是使用parse_url()方法。检查文档here。该函数将返回一个带有元素'query'的关联数组,该元素'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
)

答案 3 :(得分:0)

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

因此,您可以搜索字符串以查找?,然后适当地处理它。例如:

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