php преобразовать все ссылки в абсолютные URL-адреса

Я пишу сканер веб-сайтов на php, и у меня уже есть код, который может извлекать все ссылки с сайта. Проблема: сайты используют комбинацию абсолютных и относительных URL-адресов. Примеры (http заменен на hxxp, так как я не могу публиковать гиперссылки):

hxxp://site.com/

site.com

site.com/index.php

hxxp://site.com/hello/index.php

/привет/index.php

hxxp://site2.com/index.php

site2.com/index.php

Я не контролирую ссылки (если они абсолютные/относительные), но мне нужно по ним переходить. Мне нужно преобразовать все эти ссылки в абсолютные URL-адреса. Как мне это сделать в пхп?


person David Zorokon    schedule 15.02.2010    source источник
comment
Что вы используете для разбора html и поиска ссылок? Возможно, в вашей библиотеке уже есть способ разрешения относительных URL-адресов.   -  person Joel L    schedule 15.02.2010
comment
Я использую свою собственную функцию извлечения html-ссылок. Я не использую никакую библиотеку, кроме функций curl и php.   -  person David Zorokon    schedule 15.02.2010


Ответы (1)


Вот начало

// Your crawler was sent to this page.
$url = 'http://example.com/page';

// Example of a relative link of the page above.
$relative = '/hello/index.php';

// Parse the URL the crawler was sent to.
$url = parse_url($url);

if(FALSE === filter_var($relative, FILTER_VALIDATE_URL))
{
    // If the link isn't a valid URL then assume it's relative and
    // construct an absolute URL.
    print $url['scheme'].'://'.$url['host'].'/'.ltrim($relative, '/');
}

Посмотрите на метод http://www.php.net/manual/en/function.http-build-url.php как на другой способ создания абсолютного якоря.

person The Pixel Developer    schedule 15.02.2010
comment
относительным может быть также $relative = '../hello/index.php'; - person Francesco; 13.02.2012