PHP: Перевести относительные img src urls на абсолютные

Я вытащил HTML-страницу, используя cURL, в строку и загрузил ее в DOMDocument. Там я могу получить все теги img и их исходные атрибуты. Моя проблема теперь … как я могу сделать эти URL абсолютными?

Список URL-адресов может содержать все виды вариантов, например:

  • foobar.jpg
  • http://example.com/foobar.jpg
  • /foobar.jpg
  • ../foobar.jpg
  • folder/foobar.jpg

Если HTML извлекается из произвольного 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.