Die beste Möglichkeit, Variablen im Klartext mit PHP zu ersetzen

8

Was ist der beste Weg, um einen einfachen Text (nicht PHP-Code) zu nehmen, der Variablen im PHP-Stil enthält, und dann den Wert der Variablen zu ersetzen? Das ist schwer zu beschreiben, also hier ist ein Beispiel.

%Vor%

Ich habe erwogen, eine Regex oder vielleicht eval() zu verwenden, obwohl ich mir nicht sicher bin, was am einfachsten wäre. Dieses Skript wird nur lokal ausgeführt, so dass alle Sorgen bezüglich Sicherheitsproblemen und eval() nicht zutreffen (denke ich?) .

Ich füge auch einfach hinzu, dass ich alle notwendigen Variablen in ein Array bekommen kann, indem ich get_defined_vars() :

benutze %Vor%     
nickf 12.11.2008, 07:08
quelle

6 Antworten

5

Wenn es von einer vertrauenswürdigen Quelle ist, können Sie (dramatische Pause) eval () (Keuchen des Schreckens aus dem Publikum) verwenden.

%Vor%     
Greg 12.11.2008, 08:39
quelle
11

Regex wäre einfach genug. Und es wäre nicht wichtig, dass eval() einen Syntaxfehler in Betracht zieht.

Hier ist das Muster, um Variablennamen im PHP-Stil zu finden.

%Vor%

Ich würde wahrscheinlich dieses allgemeine Muster nehmen und ein PHP-Array verwenden, um jedes gefundene Match nachzuschlagen (mit ( preg_replace_callback() ). Auf diese Weise muss der Regex nur einmal angewendet werden, was auf lange Sicht schneller ist .

%Vor%     
Tomalak 12.11.2008 07:17
quelle
2

Hier ist, was ich gerade herausgefunden habe, aber ich wäre immer noch interessiert zu wissen, ob es einen besseren Weg gibt. Prost.

%Vor%     
nickf 12.11.2008 07:17
quelle
2

Muss es $ Haustier sein? Könnte es stattdessen <?= $pet ?> sein? Wenn ja, benutze einfach include. Dies ist die ganze Idee von PHP als Templat-Engine.

%Vor%

Dies wird ausgegeben:

%Vor%     
Zak 12.11.2008 21:46
quelle
0

Abhängig von der Situation könnte str_replace die Lösung sein.

Beispiel:

%Vor%

Wenn Sie sich str_replace ansehen, beachten Sie, dass Such- und Ersetzungsparameter Arrays von Werten enthalten können, nach denen gesucht und ersetzt wird.

    
Noah Goodrich 12.11.2008 07:23
quelle
-1

Sie könnten strtr verwenden:

%Vor%

Wahrscheinlich möchten Sie das Voranstellen in get_defined_vars () durchführen, damit Sie die Variablen nicht zweimal durchlaufen. Oder noch besser: Stellen Sie sicher, dass alle Schlüssel, die Sie zuweisen, mit dem Bezeichner übereinstimmen, den Sie in myFile.txt verwenden.

    
user37125 12.11.2008 21:53
quelle

Tags und Links