如果我在PHP中有两个URL(例如/r/jquery.js
和http://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(这非常好!我不会改变它!)。
答案 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;