| 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: 13 let
|
|||
0