Encontrar enlaces href con dom simple
Pregunta
Soy simplephpdom usando para obtener a
href vincula valores con este código:
$html = file_get_html($url);
foreach($html->find('a') as $element) $array[] = $element->href . '<br>';
Ahora, el problema es que si el enlace comienza con una barra diagonal (/), ¡el enlace no será válido!
¿Cómo puedo tener enlaces válidos?
Por ejemplo, el enlace es así:
<a href="/news45454.html">Test link</a>
Si uso el código phpsimpledom, tendré:
/news45454.html
Pero quiero tener:
http://example.com/news45454.html
¿Cómo conseguir esto?
¿Podemos probar, si el enlace comenzaba con una barra diagonal, y luego agregarle la URL del sitio?Cómo ?
Solución
Básicamente necesitas probar si el elemento HREF es una URL completa válida.Si se pasa la validación, puede continuar y agregarlo a la matriz.Sin embargo, si la validación falla, deberá concatenar el nombre base (que debería ser el dominio del sitio web).
$html = file_get_html($url);
foreach($html->find('a') as $element) {
if(filter_var($url, FILTER_VALIDATE_URL)) {
// Valid URL, add to array.
$array[] = $element->href . '<br>';
} else {
// URL is invalid, add basename.
$array[] = basename($url) . $element->href . '<br>';
}
}
Es posible que esto necesite algunos ajustes para otros casos (como <a href="#">
) pero debería funcionar para la situación que describió.
Otros consejos
Para eliminar barras diagonales utilice:
string stripcslashes ( string $str )
Vea también el Manual PHP:stripcslashes