2010-02-15 12 views
5

Piszę robota strony w php i już mam kod, który może wyodrębnić wszystkie linki z witryny. Problem: witryny używają kombinacji adresów bezwzględnych i względnych. Przykłady (http zastąpione hxxp jak ja nie może dodawać hiperłącza):php przekonwertować wszystkie linki do bezwzględnych urls

hxxp: //site.com/

site.com

site.com/index.php

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

/hello/index.php

hxxp: //site2.com/index.php

witryna2.com/index.php

Nie mam kontroli nad łączami (jeśli są bezwzględne/względne), ale muszę je wykonać. Muszę przekonwertować wszystkie te linki na bezwzględne adresy URL. Jak zrobić to w php?

+2

Czego używasz do parsowania html i znalezienia linków? Twoja biblioteka może już mieć sposób na rozwiązanie względnych adresów URL. –

+0

Używam mojej funkcji wyodrębniania linków html. Nie używam żadnej biblioteki, z wyjątkiem funkcji curl i php. –

Odpowiedz

5

Oto początek

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

Sprawdźcie do metody http_build_url jako inny sposób tworzenia absolutną kotwicę.

+1

względny może być również $ relative = '../hello/index.php; – Francesco

Powiązane problemy