2010-02-15 3 views
5

Ich schreibe einen Website Crawler in PHP und ich habe bereits Code, der alle Links von einer Website extrahieren kann. Ein Problem: Websites verwenden eine Kombination aus absoluten und relativen URLs. Beispiele (HTTP mit hxxp ersetzt, da ich nicht Hyperlinks veröffentlichen können):php alle Links zu absoluten URLs konvertieren

hxxp: //site.com/

site.com

site.com/index.php

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

/hello/index.php

hxxp: //site2.com/index.php

site2.com/index.php

Ich habe keine Kontrolle über die Links (wenn sie absolut/relativ sind), aber ich muss ihnen folgen. Ich muss alle diese Links in absolute URLs konvertieren. Wie mache ich das in PHP?

+2

Was verwenden Sie, um HTML zu analysieren und die Links zu finden? Ihre Bibliothek hat möglicherweise bereits eine Möglichkeit, relative URLs aufzulösen. –

+0

Ich benutze meine eigene HTML-Link-Extraktionsfunktion. Ich benutze keine Bibliothek außer von Curl und PHP-Funktionen. –

Antwort

5

Hier ist ein Anfang

// 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, '/'); 
} 

Werfen Sie einen Blick in die http_build_url Methode als ein andere Art und Weise einen absoluten Anker zu schaffen.

+1

ein Verwandter könnte auch $ relative = '../hello/index.php' sein; – Francesco