如何检查网址中是否包含参数?
例如,如果字符串是这样的,
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
中是否有参数。
答案 0 :(得分:25)
还可以使用array_key_exists()查找特定键,例如
if(array_key_exists('some-key', $_GET))
答案 1 :(得分: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
。您可以通过相同的运算符(三等于===
)来区分没有值且完全不出现的参数。
这适用于您传递的任何网址,而不仅仅是$_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
}