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 ?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top