Rozpoznání odkazu?
8 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Potřeboval bych pomoc s rozpoznáním odkazu, na netu jsem našel způsob, ve kterym si text rozdělím na slova, poté následuje toto: if (EregI("^(www\..+\..{2,3})$", $slovo[$y])): //jedna se odkaz typu www...... $odkaz = EregI_Replace("^(www\..+\..[a-z])$", "<a href=\"http://\\1\">\\1</a> ", $slovo[$y]); elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y])): //jedna se odkaz typu http://....... $odkaz = EregI_Replace("^(http://..+\..{2,3})$", "<a href\"=\\1\">\\1</a> ", $slovo[$y]); else: $odkaz = $slovo[$y] . " "; //jedna se o normalni slovo endif; Jede to, až na celkem zásadní věc: Když mu zadám například "http://www.webzdarma.cz/", vrátí to jako odkaz. Ale jakmile přidám cokoli za lomítko, "http://www.webzdarma.cz/forum" tak už to odkaz nepozná. Děkuji za náměty
-
Jeden námět: máš špatné rozpoznávání odkazů (čili blbý regulár). Někde doma na to mám napsanou celkem šikovnou pidifunkci a zvládá to trošku víc než jen http: Bohužel zrovna nejsem doma (kdo by taky byl o víkendu doma, že (; ), takže pokud vydržíš ...
-
ta návštěvní kniha (michal kebrt / interval) ze které si to vzal je naprosto šílená, hodně rychle bych se poohlédnul po lepší :) já používám pár řádků zkopírovaných z wordpressu, které mi fungují bez problémů. $text = preg_replace( array( '#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), array( '$1<a href="$2" rel="nofollow">$2</a>', '$1<a href="http://$2" rel="nofollow">$2</a>', '$1<a href="mailto:$2(uzenáč)$3">$2(uzenáč)$3</a>'), $text );
-
Jistě že vydržím ;-) nejdřív se podívám na Mikeho námět :-)
-
(michal kebrt / interval) ? o čem to mluvíš?
-
http://interval.cz/clanky/navstevni-kniha-v-php-bez-pouziti-databaze-osetreni-textu/ odtud to je, ten tvůj kód ;-)
-
Tak tedy: function prevod_odkazu($text, $pocet=60) { $nahrad = '!([[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/])!'; preg_match_all($nahrad, $text, $adress); for ($i=0; $i<=count($adress[0]); $i++) { if(strlen(@$adress[0][$i])>$pocet) $txt = substr($adress[0][$i], 0, $pocet-3).'...'; else @$odkazik = $adress[0][$i]; @$odkaz = '<a href="'.$adress[0][$i].'" title="'.$adress[0][$i].'" rel="nofollow">'.$txt.'</a>'; @$text = str_replace($adress[0][$i], $odkaz, $text); } return $text; } Zároveň to i skracuje text odkazu na délku uvedenou v $pocet. Btw, čas od času to házelo nějaké warningy. Nechtělo se mi to řešit standardní cestou, tak jsem tam napral "@" a už je to dobrý... :)
-
No, děkuji :) já něco zkusím, snad to pochopím.