PDA

Pogčedajte punu verziju : URL-ovi iz teksta...


Ilija Studen
06. 03. 2007., 17:58
Imam funkciju koja mi vraća URL-ove iz teksta. Problem je što vraća sve na šta naleti, a da odgovara formatu URL-a. To je ranije bilo očekivao ponašanje, međutim, sada mi treba da izvlači URL-ove samo unutar href atributa linka.

Ima neko nešto gotovo ili savet kako ovo da napravim?

Petar Marić
06. 03. 2007., 18:17
Ako je pitanju PHP - DOM radi posao (http://www.devprotalk.com/t234-isp-vam-blokira-svn-php-to-the-rescue.html).

ivanhoe
07. 03. 2007., 03:29
DOM je spor i trosi memoriju, regexp je majka za ovakve stvari:

preg_match_all('|<a[^>]+href\s*=\s*"http://([^"]+)"|i', $html, $urls1);
preg_match_all("|<a[^>]+href\s*=\s*'http://([^']+)'|i", $html, $urls2);
preg_match_all('|<a[^>]+href\s*=\s*http://([^ ]+)\s|i', $html, $urls3);
$all_urls = array_merge($urls1[1], $urls2[1], $urls3[1]);


ova 3 regexpa su tu da pokriju sva 3 moguca slucaja za formatiranje linkova, izbaci one koji ti ne trebaju. Mozda bi ovo sve moglo da se napise i kao jedan regexp, ali me mrzelo da mozgam mnogo :)

Croll
07. 03. 2007., 08:31
Probaj ovu varijantu, meni lepo radi za zamenu linkova i skidanje atributa u HREF-u:

preg_replace("/<a[\s]+[^>]*href[\s]?=[\s\"\']+(.*?)[\"\']+.*?>([^<]+|.*?)?<\/a>/i", "<a href=\"\\1\">\\2</a>", $text)

akubra
07. 03. 2007., 11:00
Evo jedan regexp koji bi trebao da radi sasvim ok:


preg_match_all('~<a\s+[^>]*href\s*=\s*["\']*([^"\'\s>]+)~i', $html, $urls);
print_r($urls[1]);

ivanhoe
08. 03. 2007., 04:29
da ovi ce raditi sa obicnim urlovima, ali ako ima javascripta u urlovima onda nastaje problem, jer moze da se pojavi apostrof unutar navodnika, i obrnuto... mada opet, da ne cepidlacim...:D