Encontrando links href com dom simples
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 ?
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