我正在寻找一个PHP函数,它接受一个相对的URL并返回是否是这个URL。
<?PHP
function isCurrentPage($page)
{
//Magic
}
?>
这将传递"/"
,"/foo/bar"
,page.php
甚至"foo/page.php?parameter=value"
等值。
我的第一次尝试涉及$page == $_SERVER["REQUEST_URI"]
,但是"/foo/bar" != "/foo/bar/"
。这不是一个问题,但困难在于它说"/foo/bar" != "/foo/bar/index.php?parameter=value"
。就我的目的而言,我需要说它们是等价的。
如何判断当前网址是否是传递给此功能的网址,具有给定的限制?我希望一个简单,强大的解决方案可以保证在未来5年内有效,如这是一个长期,高用途的项目。旧的,不推荐使用的函数和正则表达式更可取。
要进行synopsize,该方法必须在网址true
上返回http://example.com/foo/bar
:
isCurrentPage("http://example.com/foo/bar")
isCurrentPage("http://example.com/foo/bar/")
isCurrentPage("http://example.com/foo/bar/index.php")
isCurrentPage("http://example.com/foo/bar/index.phps")
isCurrentPage("http://example.com/foo/bar/index.phtml")
isCurrentPage("/foo/bar")
isCurrentPage("/foo/bar/")
isCurrentPage("/foo/bar/index.php")
isCurrentPage("/foo/bar?parameter=value")
isCurrentPage("/foo/bar/?parameter=value")
isCurrentPage("/foo/bar/index.php?parameter=value")
isCurrentPage("/foo/bar/index.php#id")
isCurrentPage("#id")
isCurrentPage("index.php")
isCurrentPage("index.php?parameter=value")
等等。
答案 0 :(得分:6)
您可以使用parse_url()
function拆分您的网址,并删除所有非重要数据,例如查询字符串。
这是一个简单的例子:
$url = 'http://yoursite.com/foo/bar?some=param';
$urlParts = parse_url($url);
// Array
// (
// [scheme] => http
// [host] => yoursite.com
// [path] => /foo/bar
// [query] => ?some=param
// )
您现在可以将$urlParts['path']
与已知路径列表进行比较......
答案 1 :(得分:1)
怎么样:
function isCurrentPage($page)
{
//Magic
$page = preg_replace('/https?:\/\/[a-zA-Z0-9_\.\-]+/', '', $page);
$url = 'http';
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$url .= 's';
}
$url .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $page;
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
return $httpCode != 404;
}