2012-03-27 7 views
2

Ich habe diese Frage ein paar Mal auf Stackoverflow, ohne klanglich wunderbare Antwort gefragt. Die Antwort scheint immer zu sein "keine Regex verwenden", ohne Beispiele von einer besseren Alternative.Entfernen Tag und Inhalt dazwischen mit REGEX/PHP

Für meine Zwecke wird dies nicht für die Validierung, sondern nach der Tatsache, Stripping getan werden.

Ich muss alle script Tags einschließlich alle Inhalte, die zwischen ihnen sein können.

Irgendwelche Vorschläge für den besten REGEX-Weg, dies zu tun?

BEARBEITEN: VORTEILHAFTE ANTWORT: Ich kann weder HTML Purifier noch die DOMXPath-Funktion von PHP verwenden.

+2

Vielleicht verwandt http://stackoverflow.com/questions/2505957/using-regex-to-remove-script-tags –

+0

Betrachten Sie diesen sehr beliebten Thread lesen http://stackoverflow.com/questions/1732348/regex-match -open-tags-except-xhtml-self-contained-tags – Tchoupi

Antwort

3

Der Grund, warum REGEX für HTML als böse angesehen wird, ist, dass es (normalerweise) leicht beschädigt werden kann und Sie gezwungen sind, Ihr Muster immer wieder zu überdenken. Wenn zum Beispiel Sie passende

<script>.+</script> 

Es gebrochen leicht mit

<script type="text/javascript"> 

Wenn Sie könnte

<script.+/script> 

Es ist auch leicht mit

gebrochen werden kann
< script>... 

Es gibt kein Ende dafür. Wenn Sie keine der Methoden verwenden können, die Sie angegeben haben, können Sie versuchen strip_tags, aber es dauert eine Whitelist als Parameter, nicht eine Blacklist, was bedeutet, dass Sie manuell jedes einzelne Tag zulassen müssen .

Wenn alles andere fehlschlagen, könnte man zu RegEx greifen, was ich mit aufkam ist diese

<\s*script.*/script> 

Aber ich jemand wetten hier wohl und das auch noch brechen könnte kommen.

+0

Danke! Wie ich oben gesagt habe, geht es nicht um Validierung, sondern um die Entfernung von Code, der bereits existiert. – kylex

Verwandte Themen