【发布时间】:2011-10-23 03:52:27
【问题描述】:
这很简单。似乎有很多解决方案可以确定 URL 是否包含特定的键或值,但奇怪的是我找不到确定 URL 是否有查询的解决方案。
使用 PHP,我只想检查当前 URL 是否有查询字符串。例如:http://abc.com/xyz/?key=valueVS。 http://abc.com/xyz/。
【问题讨论】:
标签: php
这很简单。似乎有很多解决方案可以确定 URL 是否包含特定的键或值,但奇怪的是我找不到确定 URL 是否有查询的解决方案。
使用 PHP,我只想检查当前 URL 是否有查询字符串。例如:http://abc.com/xyz/?key=valueVS。 http://abc.com/xyz/。
【问题讨论】:
标签: php
对于任何作为字符串的 URL:
if (parse_url($url, PHP_URL_QUERY))
如果是当前请求的URL,简单:
if ($_GET)
【讨论】:
if (isset($_SERVER['QUERY_STRING'])) {echo 'has string';} else {echo 'no string';},但没有运气。谢谢!
if ($_GET)(对于当前请求)有效,因为在布尔 if($x) 上下文中空数组是 false。见:php.net/manual/en/types.comparisons.php 所以确实不需要count() 或empty()。
最简单的方法可能是检查$_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);
}
【讨论】:
parse_url 在大多数情况下似乎是合乎逻辑的选择。但是我想不出“?”的情况。在 URL 中不会表示查询字符串的开头,因此对于(非常小的)性能提升,您可以使用
return strpos($url, '?') !== false;
超过 1,000,000 次迭代,strpos 的平均时间约为 1.6 秒,而 parse_url 为 1.8 秒。话虽如此,除非您的应用程序正在检查数百万个 URL 中的查询字符串,否则我会选择 parse_url。
【讨论】:
像这样:
if (isset($_SERVER['QUERY_STRING'])) {
}
【讨论】:
if (isset($_SERVER['QUERY_STRING'])) { echo 'has string'; } else {echo 'no string';} 这样的测试时,我得到上面两个示例网址的“有字符串”。
if ($_SERVER['QUERY_STRING'] !== '') { echo 'has string' }