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

时间:2013-04-29 14:30:09

标签: php url

我正在寻找一个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")

等等。

2 个答案:

答案 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;
}