从浏览器角度比较两个URL

时间:2014-07-06 14:47:17

标签: php shell url

如果我在PHP中有两个URL(例如/r/jquery.jshttp://domain.tld/r/jquery.js),是否有一种干净的方法可以比较这两个,以浏览器在访问指定的URL时解释它们的方式进行解释?

因此,对于此比较,给出了三个URL:

  • $url_a - 要与$url_b
  • 进行比较的网址
  • $url_b - 要与$url_a
  • 进行比较的网址
  • $url_c - 相对网址的基础

例如:
如果$url_a = '/r/jquery.js'$url_b = 'http://domain.tld/r/jquery.js',则进行比较

    如果true
  • 应该$url_c = 'http://domain.tld/s/index.php' 如果false
  • 应该$url_c = 'https://domain.tld/s/index.php' 如果false
  • 应该$url_c = 'http://subdomain.domain.tld/s/index.php'

我正在搜索完整解决方案,其中包括/r///../r/jquery.js 等于http://domain.tld/r/jquery.js(取决于$url_c)等方面更多。

由于可能有更多方面而非外行(如我所知),我认为需要库或内置PHP功能。虽然我也对Linux命令行工具感兴趣,但这不是最好的赌注,因为我的测试环境是windows,虽然我部署到了Linux。

非主题/背景信息:

  

我目前正在我的网站中实现一个管理JavaScript,CSS和其他依赖项的系统。为此,我需要比较JavaScript文件是否已经实现/依赖。但是那时我只有这些文件的URL(这非常好!我不会改变它!)。

1 个答案:

答案 0 :(得分:1)

要走的路是(正如@scunliffe和@James所说):

将两者都转换为绝对URL,然后比较字符串的相等性。

https://github.com/monkeysuffrage/phpuri

编辑:

尚未经过测试:

require_once 'phpuri.php';
function urlsEqual($urlA, $urlB, $base) {
    $oBase = phpUri::parse($base);
    $oUrlA = $oBase->join($urlA);
    $oUrlB = $oBase->join($urlB);
    return $oUrlA == $oUrlB;
}

$url_a = '/r/jquery.js';
$url_b = 'http://domain.tld/r/jquery.js';
$url_c = 'http://domain.tld/s/index.php';
if(urlsEqual($url_a, $url_b, $url_c))
    echo $url_a.' == '.$url_b;
else
    echo $url_a.' != '.$url_b;