Trovare a href collegamenti con semplici dom
Domanda
Io sono simplephpdom utilizzando per ottenere a
href valori di collegamenti con questo codice :
$html = file_get_html($url);
foreach($html->find('a') as $element) $array[] = $element->href . '<br>';
Ora, il problema è che se il link , è di iniziare con una barra (/) il link non sarà valida !
Come posso avere un link valido ?
Per esempio , il link è questo :
<a href="/news45454.html">Test link</a>
se io uso phpsimpledom codice, avrò :
/news45454.html
Ma, voglio avere :
http://example.com/news45454.html
Come ottenere questo?
Si può testare , se il link è stato partire con slash , quindi aggiungere l'url del sito ad esso ?!Come ?
Soluzione
Fondamentalmente, è necessario verificare se l'elemento HREF è un valido URL completo.Se la convalida passa, si può andare avanti e aggiungere all'array.Tuttavia, se la convalida non riesce, è necessario concatenare il nome di base (che dovrebbe essere di dominio del sito 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>';
}
}
Questo può avere bisogno di un po ' di tweaking per altri casi (ad esempio <a href="#">
) ma dovrebbe funzionare per la situazione da te descritta.
Altri suggerimenti
Per eliminare le barre usate:
string stripcslashes ( string $str )
.
Vedi anche il manuale PHP: stripcslashs