phpbar.de logo

Mailinglisten-Archive

[php] Expertenfrage: include aus Datenbank / preg_replace

[php] Expertenfrage: include aus Datenbank / preg_replace

Laura Reising php_(at)_phpcenter.de
Wed, 16 May 2001 09:16:56 +0200


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