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 ?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top