Pergunta

Eu sou simplesphpdom usando para obter a href vincula valores com este código:

$html = file_get_html($url);
foreach($html->find('a') as $element) $array[] = $element->href . '<br>'; 

Agora, o problema é que se o link estiver começando com barra (/) o link não será válido!

Como posso ter links válidos?

Por exemplo, o link é assim:

<a href="/news45454.html">Test link</a>

se eu usar o código phpsimpledom, terei:

/news45454.html

Mas eu quero ter:

http://example.com/news45454.html

Como conseguir isso?

Podemos testar se o link estava começando com barra e adicionar o URL do site a ele?!Como ?

Foi útil?

Solução

Basicamente você precisa testar se o elemento HREF é uma URL completa válida.Se a validação for aprovada, você pode prosseguir e adicioná-la ao array.Porém, se a validação falhar, será necessário concatenar o nome base (que deve ser o domínio do site).

$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>';
    }
}

Isso pode precisar de alguns ajustes para outros casos (como <a href="#">), mas deve funcionar para a situação que você descreveu.

Outras dicas

Para excluir barras, use:

string stripcslashes ( string $str )

Veja também o Manual PHP:stripslashes

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top