[PHP] preg_replace + volání fce na replacementy
Potřeboval bych nakopnout... potřebuju v regulárním výrazu zavolat funkci na nahrazovací řetězec, asi to není moc srozumitelný, tak dám příklad:
Kód:
$co=preg_replace("/\[download=(.*),(.*)\]/","<a href=\"/download/\\1\">\\2</a>(".filesize("download/\\1).")",$co);
Tohle by mělo udělat že to vyrobí odkazy a za ně velikost souboru. ALE místo toho to zavolá funkci filesize s parametrem "download/\1", což samozřejmě nefunguje...
Ještě příklad jak by to mělo správně pracovat:
[download=pes.exe, Stáhni psa] => <a href="download/pes.exe">Stáhni psa</a> (369MB)
Děkuji za radu ;-)
Re: [PHP] preg_replace + volání fce na replacementy
Re: [PHP] preg_replace + volání fce na replacementy
By se to dalo treba jeste zapsat tak ze za ten regulerni vyraz das modifikator e a pak do retezce co se ma nahradit muzes pouzit libovolny php kod...
PHP kód:
preg_replace("/\[download=(.*),(.*)\]/e",'$co = "<a href="/download/\\1">\\2</a>(".filesize("download/\\1").")"',$co);
Re: [PHP] preg_replace + volání fce na replacementy
Tak jsem si nastudoval preg_replace_callback a je to ok, díky za nakopnutí K+
Re: [PHP] preg_replace + volání fce na replacementy
Citace:
Původně odeslal
l_iNu$
By se to dalo treba jeste zapsat tak ze za ten regulerni vyraz das modifikator
e a pak do retezce co se ma nahradit muzes pouzit libovolny php kod...
PHP kód:
preg_replace("/\[download=(.*),(.*)\]/e",'$co = "<a href="/download/\\1">\\2</a>(".filesize("download/\\1").")"',$co);
/e switch se nedoporucuje pouzivat z bezpecnostnich duvodu ...
a navic co tak koukam do diskuze na php.net
Citace:
Note that it is in most cases much more efficient to use preg_replace_callback(), with a named function or an anonymous function created with create_function(), instead of the /e modifier. When preg_replace() is called with the /e modifier, the interpreter must parse the replacement string into PHP code once for every replacement made, while preg_replace_callback() uses a function that only needs to be parsed once.
Re: [PHP] preg_replace + volání fce na replacementy
Citace:
Původně odeslal
Fox!MURDER
/e switch se nedoporucuje pouzivat z bezpecnostnich duvodu ...
Aha dik za info. Naštěstí jsem tohle zatím moc nepotřeboval :).