PHP:将相对img src url转换为绝对url


PHP: Translate relative img src urls to absolute

我用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。