我用cURL获取了一个HTML页面,并将其加载到DOMDocument中。在那里我可以得到所有的img标签和它们的源属性。我现在的问题是……如何使这些url成为绝对的?
url列表可以包含各种变体,例如:
-
foobar.jpg
-
http://example.com/foobar.jpg
-
/foobar.jpg
-
../foobar.jpg
-
folder/foobar.jpg
如果HTML是从任意URL获取的,那么将这些图像URL转换为绝对URL的安全方法是什么?是否有一种方法可以将基本标签也考虑在内?
这是一个很好的PHP示例。
function rel2abs($rel, $base) {
// something
}
更多好的例子:
- 如何将相对URL转换为绝对URL 如何解析和构建url
这里有一个方便的函数:
function absUrl($rel, $base) {
if (parse_url($rel, PHP_URL_SCHEME) != '') return $rel;
if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel;
extract(parse_url($base));
$path = preg_replace('#/[^/]*$#', '', $path);
if ($rel[0] == '/') $path = '';
$abs = "$host$path/$rel";
$re = array('#(/'.?/)#', '#/(?!'.'.)[^/]+/'.'./#');
for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {}
return $scheme.'://'.$abs;
}
$rel
是你的相对路径,$base
是你的基础URL。