PHP-Tags entfernen

rellek

relativ sensationell
Teammitglied
Hallöchen,

ich arbeite gerade so ein kleines bisschen an etwas, was sowas ähnliches wird wie ein Template-System.
Das soll etwas mehr können als nur stur HTML ausgeben, deshalb ists etwas komplexer. Funktioniert soweit aber.

PHP ist jedoch böse, wie wir alle wissen. :D Und deshalb hätte ich gerne die PHP-Tags, die ein Benutzer da reinzufummeln versucht, gekillt.
Da PHP-Tags sein können <?php ... ?> und in älteren Versionen auch <? ... ?>, haben wir ein Problem: Blöderweise fangen XML-Dateien (etwa RSS-Feeds) auch mit <? an. Genauer gesagt mit <?xml
Versucht habe ichs mit:
PHP:
$tmp = preg_replace('/<\?^(xml)(.*)\?>/Uis', '', $tmp);

Das funktioniert aber nicht. Der lässt nun sowohl <?xml als auch <?php als auch <? drin.

Hat jemand eine Idee?
 

Titus

Goldmember
PHP:
$tmp = preg_replace('/(<\? |<\?php)(.*)\?>/Uis', '', $tmp);
war ^ in der pattern für "anfang"? nur in der [^ 0-9] ist das ne negierung, ob man da aber auch strings ausnehmen kann?

bin da aber grad auch etwas aus der Übung
 

rellek

relativ sensationell
Teammitglied
Hm also auf dieser krassen Seite:
http://www.zytrax.com/tech/web/regex.htm
steht:
Anhang anzeigen 129

Deshalb dacht ich, man könne so negieren.

Danke für deine Lösung - sie funktionierte noch nicht 100% aber hat mich auf die richtige Fährte gelockt.
Das Problem ist, dass nach <? kein Leerzeichen folgen muss, sondern auch ein Zeilenumbruch. :pinch: Das behebt die Klasse der Whitespaces aber:
PHP:
$tmp = preg_replace('/((<\?\s)|(<\?php))(.*)\?>/Uis', '', $tmp);

Sieht gruselig aus, funktioniert aber. :D
 

Anhänge

  • regex-not.png
    regex-not.png
    4,9 KB · Aufrufe: 53

Titus

Goldmember
so vielleicht?
PHP:
$tmp = preg_replace('/<\?(\s|php)(.*)\?>/Uis', '', $tmp);

BTW krasse Seite
The ^ (circumflex or caret) inside square brackets negates the expression (we will see an alternate use for the circumflex/caret outside square brackets later), for example, [^Ff] means anything except upper or lower case F and [^a-z] means everything except lower case a to z.

The ^ (circumflex or caret) outside square brackets means look only at the beginning of the target string, for example, ^Win will not find Windows in STRING1 but ^Moz will find Mozilla.

ich kenne die verwendung jedenfalls nur zu beginn einer Pattern, nicht aber mittendrin - da XML aber defintiv nicht am anfang steht hat es deswegen nicht funktioniert
 

rellek

relativ sensationell
Teammitglied
Ah, super. Sieht nicht mehr ganz so gruselig aus und funktioniert.

Danke! :)

@ krasse Seite
Jaja der Firefox. Strg+F, gesucht, gefunden, ging nicht. :D
 

rellek

relativ sensationell
Teammitglied
Für die Nachwelt:
Habe den Spass noch etwas gepimpt, weil bei PHP der schliessende Tag nicht unbedingt notwendig ist, wenn nur noch PHP bis zum Fileende kommt...
PHP:
$tmp = preg_replace('/<\?(\s|php)(.*)(\?>|\z)/Uis', '', $tmp);

\z ist zwar "Stringende" und nicht EOF, aber das ist in meinem Fall dasselbe :)
 
Oben