Neilgas, bet ne itin paprastas kodas, skirtas ištraukti visas nuorodas iš teksto/puslapio kodo. Naudingas indeksuojant nuorodas, darant savo paieškos sistemą ir panašiais atvejais, kai reikia “išžvejoti” iš didelio teksto tik nuorodas ir kiekvienos nuorodos tekstą.

Paprastai tai daroma su reguliariais reiškiniais, konkrečiai - preg_match_all funkcija (kito normalaus būdo neteko bandyti). Skriptas atsižvelgia į įvairius variantus nuorodos kode, pvz.., target=”_blank”, “title” žymas - ištraukia tik adresą ir nuorodos tekstą:

function nuorodos($s)
{
$a = array();

if(preg_match_all(’/<a\s+.*?href=[\”\’]?([^\”\’ >]*)[\”\’]?[^>]*>(.*?)<\/a>/i’,$s,$traukiam,PREG_SET_ORDER))
{
foreach($traukiam as $yra)
{
array_push($a,array($yra[1],$yra[2]));
}
}
return $a;
}

$tekstas =<<<EOD
bele koks tekstas <a href=”http://www.google.com”>pirma nuoroda</a>
visokie beprasmiski zodziai <a href=”http://www.google.de”>antra nuoroda</a>
kuriuos reikia isfiltruoti <a href=”http://www.yahoo.de”>trecia nuoroda</a> pet
kad liktu tik nuorodos <a target=”_blank” href=”http://www.one.lt”>ketvirta nuoroda</a>
<a href=”http://www.delfi.lt”>penkta nuoroda</a>

ggg … dar siek tiek bele kokio teksto…
EOD;

$links = nuorodos($tekstas);
$kiek=count($links);

for ($i = 0; $i < $kiek; $i++) {
echo $links[$i][0].” (”.$links[$i][1].”)<br>”;
}

Rezultatas turėtų gautis toks:

http://www.google.com (pirma nuoroda)
http://www.google.de (antra nuoroda)
http://www.yahoo.de (trecia nuoroda)
http://www.one.lt (ketvirta nuoroda)
http://www.delfi.lt (penkta nuoroda)

(Skliausteliuose - nuorodos tekstas).

Comments are closed.