Mailinglisten-Archive |
Hallo Liste, habe mich lange nicht gemeldet, da ich mit einem Lingo-Projekt beschäftigt war. Wer Lingo kennt, weiß was er an PHP hat. Nun habe ich auch gleich wieder eine Frage: Ich möchte in eine Datenbank einen PHP-Code schreiben und diesen dann in einer anderen PHP-Datei nutzen. Das wäre ja noch kein Problem - einfach den Code in einen String einlesen und dann "eval($einString)". Nun besteht dieser PHP-Code aber - wie bei einer include-Datei - aus HTML- und PHP-Elementen, etwa so: foo<p> <?PHP echo("bla"); ?><p> bar Damit wäre das Ganze für eval() nicht mehr verdaulich. Also habe ich mir folgenden Hack ausgedacht (das "strtoupper()" ist hier Blödsinn - es steht für eine andere Funktion, die ich haben will): $einString='foo<p><?PHP echo("bla"); ?><p>bar'; $einString="echo('".preg_replace("#<\?(PHP)?(.*?)\?>#ie", "'\'); '.strtoupper('\\2').' echo(\''", $einString)."');"; echo($einString); Damit wird aus foo<p><?PHP echo("bla"); ?><p>bar dann echo('foo<p>'); ECHO(\"BLA\"); echo('<p>bar'); Fast gut, aber wo kommen die Backslashe her? Wenn ich das so durch eval() jage, raucht PHP ab. Natürlich könnte ich statt strtoupper('\\2') sagen strtoupper(stripslashes('\\2')), aber das ich IMHO keine Lösung. Bei der nächsten PHP-Version verhält sich preg_replace vielleicht nicht mehr so komisch und ich komme in Teufels Küche mit zuviel wegrasierten Slashen. Ich habe beobachtet, daß das Phänomen auftritt, sobald man den Parameter #e gibt. Ohne #e erzeugt PHP keine Backslashe. Bug oder Feature (PHP 4.0.4 unter windoof)? Hat jemand Rat (vielleicht auch, wie ich mein ursprüngliches Problem geschickter angehen könnte)? 1000 Dank Laura
php::bar PHP Wiki - Listenarchive