Autor | Zpráva | ||
---|---|---|---|
matlala Profil |
#1 · Zasláno: 23. 1. 2010, 21:40:34
Ahoj,
potřeboval bych malinko poradit s předěláním všech funkcí ereg za preg, konkrétně třeba nevím jestli je tohle naprosto správně a efektivně napsané (myslím reguláry, původně tam bylo eregi_replace a přidal jsem jen na začátek # a na konec #i)? U eregi->preg_match stačilo ndát na začátek / a na konec /i, nevim ale přesně proč a co to je, můžete mi to objasnit?. function PrevodOdkazu($vstup,$MaxDelka=100,$MaxDelkaSlova=100){ $text=preg_replace("# +#i", " ", $vstup);//odstraní přebytečné mezery $text = preg_replace('#http://([a-zA-Z0-9\?=%&/\$\._äëöü\#;-]*)#i', ' http://\\1 ', $text);//přidá před a za odkaz mezery $text = preg_replace('"# http://([a-zA-Z0-9\?=%&/\$\._äëöü\#;-]*) #i"', '"http://\\1"', $text);//odsraní mezery v atributech html-třeba u href="http://..." $regular_href='#^(http://[a-zA-Z0-9\?=%&/\$\._äëöü\#;-]*)$#i';//regulár pro překlad. Překládá $slova = explode(" ",$text); $text = ""; for($i = 0; $i < sizeof($slova); $i++) { if(eregi_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i])) { $cast=substr($slova[$i], 0, $MaxDelka); if(strlen($slova[$i])>$MaxDelka){$cast.="...";}//pokud je odkaz delší než $MaxDelka bude zkrácen na $MaxDelka a přidají s eza něj ...(tečky)) $slova[$i] = preg_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i]);//samotný převod } else { $slova[$i] = wordwrap($slova[$i], $MaxDelkaSlova, " ", 1);//zalomí extrémě dlouhá slova delší než $MaxDelkaSlova } $text .= " ".$slova[$i]; } $vychozi=array("&"," <a href=\"","</a> "); $nahrad=array("&","<a href=\"","</a>"); $text=str_replace($vychozi,$nahrad,$text);//přeloží odkazy do správné podoby s ASCII a převede zpátky mezery před a za odkazem return $text; } původní funkce: function PrevodOdkazu($vstup,$MaxDelka=100,$MaxDelkaSlova=100){ $text=eregi_replace(" +", " ", $vstup);//odstraní přebytečné mezery $text = eregi_replace('http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)', ' http://\\1 ', $text);//přidá před a za odkaz mezery $text = eregi_replace('" http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*) "', '"http://\\1"', $text);//odsraní mezery v atributech html-třeba u href="http://..." $regular_href='^(http://[a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)$';//regulár pro překlad. Překládá $slova = explode(" ",$text); $text = ""; for($i = 0; $i < sizeof($slova); $i++) { if(eregi_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i])) { $cast=substr($slova[$i], 0, $MaxDelka); if(strlen($slova[$i])>$MaxDelka){$cast.="...";}//pokud je odkaz delší než $MaxDelka bude zkrácen na $MaxDelka a přidají s eza něj ...(tečky)) $slova[$i] = eregi_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i]);//samotný převod } else { $slova[$i] = wordwrap($slova[$i], $MaxDelkaSlova, " ", 1);//zalomí extrémě dlouhá slova delší než $MaxDelkaSlova } $text .= " ".$slova[$i]; } $vychozi=array("&"," <a href=\"","</a> "); $nahrad=array("&","<a href=\"","</a>"); $text=str_replace($vychozi,$nahrad,$text);//přeloží odkazy do správné podoby s ASCII a převede zpátky mezery před a za odkazem return $text; } Předem díky, Petr |
||
nightfish Profil |
#2 · Zasláno: 24. 1. 2010, 09:24:39 · Upravil/a: nightfish
matlala:
- na řádku 9 zůstalo nepřetransformované eregi_replace - uvedení "i" na konci regulárního výrazu znamená, že se vyhledává "case-insensitive", čiliže bez ohledu na velikost písmen - regulární výraz pro URL bude akceptovat i "http://", což má k platnému URL daleko - RV pravděpodobně nebude akceptovat URL s diakritikou Moderátor nightfish: Z vlákna byly odstraněny OT příspěvky.
|
||
matlala Profil |
#3 · Zasláno: 25. 1. 2010, 09:04:30 · Upravil/a: matlala
nightfish:
- regulární výraz pro URL bude akceptovat i "http://", což má k platnému URL daleko - RV pravděpodobně nebude akceptovat URL s diakritikou Jak to tedy vylepšit? |
||
Časová prodleva: 14 let
|
0