Hilfe bei regulären Ausdrücken benötigt

SCIPIO-AEMILIANUS

aka Dubdidadu
Ich würde gerne wissen, ob und wie es möglich ist mit preg_replace folgendes zu bewerkstelligen:
Ich hab ein Formular das sendet per Post ein paar html Zeilen. Jetzt wüsst ich gern, wie ich alle HTML Tags bis auf die p a und img ersetzen(ala rawurlencode) kann, oder muss ich mir da selbst noch eine Funktion schreiben, die das kann.
 
htmlentities()

und dann brauchst ein Pattern, dass aus den umgewandelten &lt;a&gt; wieder ein <a> macht etc.

Da muss ich aber vorher jetzt mal nach dem Anwendungsbereich und dem Sinn fragen, die "nicht erlaubten" Elemente wieder anzuzeigen.
 
Zuletzt bearbeitet:
Hi,

schau dir hierzu [phpf]htmlentities[/phpf] und [phpf]htmlspecialchars[/phpf] an.

mfg Maik
 
Ja gut das mit zurückersetzen von &lt;a&gt; zu <a> wär jetzt nen anderer Weg. Der Zweck ist ne Art Gästebuch-artige Sache, die jedoch nur p img und a tags zulässt. Ich möchte nämlich keine php, javascript und ähnliche Sachen dabei dann haben.
Achso nebenbei, wie kann ich / bei den regulären Ausdrücken abfragen, weil das ist ja normal ein Parameter!?
 
Hi,

Ja gut das mit zurückersetzen von &lt;a&gt; zu <a> wär jetzt nen anderer Weg. Der Zweck ist ne Art Gästebuch-artige Sache, die jedoch nur p img und a tags zulässt. Ich möchte nämlich keine php, javascript und ähnliche Sachen dabei dann haben.

Dann wende striptags() mit den entsprechenden Ausnahmen an. Es gibt in einem Gästebuch o.ä. doch keinen Grund, das verbotene HTML anzuzeigen. Wech damit. ^^

Achso nebenbei, wie kann ich / bei den regulären Ausdrücken abfragen, weil das ist ja normal ein Parameter!?

Du meinst, wie Du Zeichen mit besonderer Bedeutung als Zeichen selbst im Ausdruck verwenden kannst? Maskiere sie mit einem Backslash.

LG
 
So noch eine Frage. Ich hab jetzt folgenden Code(soll die oben genannte Aufgabe übernehmen) :
PHP:
<?php
$str="<p>text</p><script>text</script><a>text</a>";
$str=preg_replace("/<(?!(\/img|\/a|\/p|a|img|p))/","&lt;",$str);
$str=preg_replace("/(?<!(a|img|p))>/","&gt;",$str); <====FEHLERZEILE
echo $str;
?>
Jetzt hat er bei der markierten Zeile folgendes Problem:
Warning: preg_replace(): Compilation failed: lookbehind assertion is not fixed length at offset 13 in........
 
Zuletzt bearbeitet:
Ich wollt hier noch einmal die Diskussion "anfachen":
Weiterhin besteht der im letzten Post beschriebene Fehler, aber wenn ich aus dem oder Abschnitt das img entferne läuft der Code 1a. kann mir einer eklären woran das liegt? Und, wie ich das Problem beheben kann.
PHP:
$str="<p>text</p><script>text</script><a>text</a>";
$str=preg_replace("/<(?!(\/img|\/a|\/p|a|img|p))/i","&lt;",$str);
$str=preg_replace("/((?<!(p|a))>)/i","&gt;",$str);
echo$str;
 
Ist jetzt keine Antwort auf deine Frage, aber warum verbietest du nicht einfach html komplett (bzw. entfernst es mit htmlentities()) und benutzt für Links und ähnliches BBCode, wie es z.B. auch hier im Forum gemacht wird. BBCode - Pattern findest du bei Google sehr schnell!
 
Zurück