PHP - Entfernen <?php ?> - tags aus einem string
Was ist der beste Weg, um diese zu entfernen-tags aus einem string, um es vorzubereiten weitergegeben eval() ?
zB. der string kann so etwas wie dieses:
<?php
echo 'hello world';
?>
Hello Again
<?php
echo 'Bye';
?>
Offensichtlich str_replace funktioniert nicht, weil die beiden php-tags in der Mitte da sein müssen (die 1. und die letzten, die entfernt werden müssen)
- Warum wollen Sie dies tun? Es riecht wie eine schlechte Idee.
- Die Antwort ist, dass Sie nicht verwenden
eval
. 😉 (Nur 25% Witze eigentlich.) - Ich verwendet eval sobald die Welpen gestorben, wahre Geschichte.
- Vertrauen Sie mir, das ist ein sehr legitimer Grund sein 🙂
- Welchen Zweck würde das sein?
- eine textarea-Komponente, die ermöglicht es dem site-administrator das hinzufügen/ändern von Sachen in das aktuelle Thema.
- Sie können versuchen, tokenisierung, dann entfernen Sie Sie wissen? 😉
- eval() ist böse.. es kann dazu führen, dass alle Arten von Schwachstellen, da Sie nicht wissen, ob es schrubben Variablen, die Sie verwendet; der Zugriff auf Dinge, die auf dem Dateisystem, web, usw; Dinge, die Sie mit den session oder cookies; oder das töten von Welpen. Schlecht.
- das Letzte hat mich zum lachen
- Menschen, eval() ist nicht böse. Während es muss mit Vorsicht verwendet werden, ist es eine nützliche PHP-Funktion, die ideal für bestimmte Fälle
- Zum Beispiel
eval()
wäre ideal, wenn Sie waren, Benutzer hinzufügen, PHP-code-snippets aus einer web-Oberfläche zur Ausführung auf der Baustelle. (Natürlich nur mit admin-Benutzer erlaubt werden würde, um auf die Schnittstelle zugreifen.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie eine schlechte Idee, aber wenn Sie wollen die start-und end-Objekte entfernt, die Sie tun könnten
Diese sollte es tun (nicht getestet).
Bitte sagen Sie mir auch warum Sie es tun wollen, ich bin mir 95% sicher, dass es einen besseren Weg gibt.
In der Regel, Sie würden nicht wollen, übergeben Sie eine Funktion eval.
Wenn Sie wollen, zu entfernen Sie einfach die tags, string_replace würde den job ganz gut, allerdings könnten Sie besser dran mit einem regex.
preg_replace(array('/<(\?|\%)\=?(php)?/', '/(\%|\?)>/'), array('',''), $str);
Diese umfasst alt -, asp-tags, die php-short-tags, php echo, tags und normale php-tags.
Gibt es keine Notwendigkeit zu verwenden regex; PHP bietet Funktionen zum entfernen von Zeichen am Anfang oder Ende einer Zeichenfolge.
ltrim
entfernt Zeichen aus Anfang der Zeichenfolgertrim
von der Ende der Zeichenfolge, undtrim
von beiden enden.Den ersten
trim()
entfernt alle führenden bzw. nachgestellten Leerzeichen, die sind in der Standortwahl. Wenn wir ausgelassen und man war whitespace außerhalb der PHP-tags in der Zeichenkette, dann dieltrim
undrtrim
Befehle nicht entfernen, die PHP-tags.<? ?>
-tags vorhanden sein können mehrmals in der Datei, nicht nur am Anfang und am Ende. Tatsächlich, wenn Sie Blick auf seine Probe, es gibt zwei Arten von tags gibt. Also regex ist wohl die praktikabelste Lösung.eval()
. Wie auch immer, wie genau würde ein Dritter Satz von tags schlecht sein??>
tag, oder ein Leerzeichen vor dem ersten<?php
tag (oder jede andere whitespace-Umgebung die tags)trim()
und Verwandte ist ein Charakter-pool. So würden Sie nicht brauchen, geben Sie<?php
und<?
als der erste Streifen der letzteren.trim()
auf diese Weise funktioniert, aber es ist das gleiche fürltrim()
undrtrim()
?Könnten Sie tun:
dem schließen der implizite tags machen und alles funktioniert.