Autor | Zpráva | ||
---|---|---|---|
user243 Profil |
#1 · Zasláno: 19. 10. 2013, 07:48:57
Dobrý den,
mám text, který prohledávám na odkazy a upravuji je do HTML podoby, ale potřeboval bych názvy příliš dlouhých odkazů trochu oříznout; něco jsem sesmolil, ale chová se to trochu divně... $text = preg_replace("/\[url=(.+?)\](.+?)\[\/url]/s", '<a href="\\1" target="_blank">' . ((strlen('\\2') > 29)?(substr('\\2',0,26).'…'):'\\2') . '</a>', $text); předem děkuji za pomoc. |
||
Tori Profil |
#2 · Zasláno: 19. 10. 2013, 08:18:26
Tohle nefunguje, protože se nejdřív vyhodnotí podmínka a pak se teprv výsledek použije jako nahrazení.
$text = preg_replace_callback("/\[url=(.+?)\](.+?)\[\/url]/s", function($matches) { return '<a href="'.$matches[1].'" target="_blank">' . (strlen($matches[2]) > 29 ? substr($matches[2], 0, 26).'…' : $matches[2]) . '</a>'; }, $text); |
||
user243 Profil |
#3 · Zasláno: 20. 10. 2013, 08:04:10
To mi nedošlo, děkuji.
Je nějaký speciální rozdíl při použití anonymní funkce vůči obyčejné? |
||
Tori Profil |
#4 · Zasláno: 21. 10. 2013, 11:42:29
Anonymní funkce fungují od PHP 5.3 a nemůže u nich dojít k tomu, že by někde existovala nějaká jiná stejnojmenná fce. Výkonový rozdíl bude asi zanedbatelný. Osobně je u regulárů (a polí) používám hlavně kvůli přehlednosti kódu - jsou na stejném místě jako regulár, takže nemusím při jejich změně překlikávat někam na definici fce.
|
||
user243 Profil |
#5 · Zasláno: 21. 10. 2013, 13:19:37
Dobře, ještě jednou děkuji.
|
||
Časová prodleva: 11 let
|
0