如何检查相对URL是否是PHP中的当前URL?

Sup*_*tar -4 php url

我正在寻找一个PHP函数,它接受一个相对的URL并返回是否是这个URL.

<?PHP
function isCurrentPage($page)
{
    //Magic
}
?>
Run Code Online (Sandbox Code Playgroud)

这将传递的值,例如"/","/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".就我的目的而言,我需要它说这些是等价的.

如何判断当前URL是否是传递给此函数的URL,具有给定的限制?我希望一个简单,强大的解决方案能够保证在未来5年内发挥作用,因为这是一个长期的,高使用率的项目.旧的,非弃用的函数和正则表达式是更可取的.

要进行synopsize,该方法必须true在url上返回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")

等等.

Lix*_*Lix 7

您可以使用该parse_url()功能拆分URL并删除所有非重要数据,例如查询字符串.

这是一个简单的例子:

$url = 'http://yoursite.com/foo/bar?some=param';
$urlParts = parse_url($url);
// Array
// (
//     [scheme] => http
//     [host] => yoursite.com
//     [path] => /foo/bar
//     [query] => ?some=param
// )
Run Code Online (Sandbox Code Playgroud)

您现在可以将$urlParts['path']您的已知路径列表进行比较......