Autor Zpráva
matlala
Profil
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("&amp;","<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("&amp;","<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
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
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: