Frage

Ich habe eine Zeichenfolge, die in es HTML & PHP hat, wenn ich die Zeichenfolge aus der Datenbank ziehen, wird es echo'd auf Bildschirm, aber der PHP-Code wird nicht angezeigt. Der String sieht wie folgt aus:

   $string = 'Hello <?php echo 'World';?>';
   echo $string;

Output

   Hello

Source Code

   Hello <?php echo 'World';?>

Als ich in den Quellcode schauen, kann ich die PHP-Linie dort sehen. Also, was ich tun muß, ist eval () nur das PHP-Segment, das in der Zeichenfolge ist.

Eine Sache zu prüfen ist, dass die PHP zu einem bestimmten Zeitpunkt irgendwo in der Kette angeordnet sein könnte.

* Nur, meine PHP zu klären Config ist richtig, dies ist ein Fall von einigen PHP aus der Datenbank ausgegeben werden und nicht Rendering, weil ich darin eine Variable mit dem PHP-Code bin echo'ing, es scheitert zu rennen. *

Nochmals vielen Dank für jede Hilfe kann ich erhalten.

War es hilfreich?

Lösung

$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);

Das wird funktionieren, aber wie andere haben und wird vorschlagen, das ist eine schreckliche Idee. Ihre Anwendungsarchitektur sollte niemals dreht sich um Code in der Datenbank zu speichern.

Am einfachsten, wenn Sie Seiten, die immer Strings angezeigt werden müssen, speichern Sie diese Zeichenfolgen in der Datenbank, nicht Code, sie zu produzieren. Daten der realen Welt ist komplizierter als das, aber muss immer ordnungsgemäß in der Datenbank modelliert werden.

Edit:. Brauchen würde mit preg_replace_callback Anpassung der Quelle zu entfernen / interpoliert richtig

Andere Tipps

Sie sollten nicht den PHP-Code eval, es einfach laufen. Es ist müssen PHP-Interpreter installiert werden, und Apache + PHP richtig konfiguriert ist. Dann ist diese Php-Datei ausgeben soll Hallo Welt.

Antwort auf die edit: Verwenden Sie preg_replace_callback den PHP-Teil zu bekommen, eval es, ersetzen Sie den Eingang zum Ausgang, Echo es dann. Aber. Wenn Sie aus der Datenbank kommen Dinge eval sollte, ich bin fast sicher, es ist ein Design-Fehler.

eval () sollte gut funktionieren, solange der Code richtiger PHP ist und endet mit einem Semikolon. Wie wäre es zuerst die PHP-Tag abzustreifen, dann eval.

Das folgende Beispiel wurde getestet und funktioniert:

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

So stellen Sie sicher, dass alles, was Sie von den db abrufen zuerst korrekt desinfiziert wurde, da Sie im Wesentlichen sind damit alle, die Inhalte in die db bekommen, Code auszuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top