2010-02-15 14 views
5

Estoy escribiendo un rastreador de sitios web en php y ya tengo un código que puede extraer todos los enlaces de un sitio. Un problema: los sitios usan una combinación de direcciones absolutas y relativas. Ejemplos (http reemplazados con hxxp ya que no puedo publicar hipervínculos):php convertir todos los enlaces a las URL absolutas

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

No tengo control sobre los enlaces (si son absolutos/relativos), pero tengo que seguirlos. Necesito convertir todos estos enlaces en URL absolutas. ¿Cómo hago esto en php?

+2

¿Qué está utilizando para analizar html y encontrar los enlaces? Es posible que su biblioteca ya tenga una forma de resolver las URL relativas. –

+0

Estoy usando mi propia función de extracción de enlaces html. No utilizo ninguna biblioteca, excepto las funciones curl y php. –

Respuesta

5

Aquí es un comienzo

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

Tener una mirada en el método http_build_url como otra manera de crear un ancla absoluta.

+1

un pariente podría ser también $ relative = '../hello/index.php'; – Francesco

Cuestiones relacionadas