1. Dashboard
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. HTML - Webmaster Forum
  2. Programmierung - Entwickler Forum
  3. PHP Forum - Apache - CGI - Perl - JavaScript und Co.

Mit RegEx HTML filtern

  • Teron Gerofied
  • 23. November 2008 um 16:43
  • Teron Gerofied
    Meister(in)
    Beiträge
    347
    • 23. November 2008 um 16:43
    • #1

    Hallo Community,

    ich hab ein profilsystem und da gibts ein Feld wo man bei seinem profil HTML und CSS verwenden darf um die Seite umzudesignen.

    dieses Feld verwendet auch die Funktion nl2br().

    Wenn jetzt jemand einen CSS-Sytle-Tag eingibt kommt das (logischerweise):

    <style type="text/css"><br />
    body {<br />
    background-color: #000000;<br />
    }<br />
    </style>

    Ich möchte die Style-HTML Tags herausfiltern und die Umbrüche entfernen. Habe nur wenig ahnung von RegEx ... Kann mir wer helfen, hab nirgendwo was brauchbares gefunden.

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • jojo87
    der/die Göttliche
    Reaktionen
    6
    Beiträge
    3.131
    • 24. November 2008 um 14:45
    • #2

    Nach grobem Überschlagen wird das ne ziemlich laufzeitintensive Funktion.
    Wäre es auch eine Lösung, die Stylegeschichten seperat eingeben zu lassen?


  • Teron Gerofied
    Meister(in)
    Beiträge
    347
    • 24. November 2008 um 16:00
    • #3

    Hallo,

    ja daran hatte ich gedacht aber ich brauchs garnicht mehr ... Kann RegEx wohl besser als ich dachte.

    Simpel:

    Code
    $tmp1 = eregi_replace("(.*)<style(.*)>(.*)</style>(.*)", [URL='file://1/']\\1[/URL], $html_text);
    $tmp2 = eregi_replace("(.*)<style(.*)>(.*)</style>(.*)", "<style\\2>\\3</style>", $html_text);
    $tmp3 = eregi_replace("(.*)<style(.*)>(.*)</style>(.*)", [URL='file://4/']\\4[/URL], $html_text);
     
    echo nl2br($tmp1).$tmp2.nl2br($tmp3);



    Das geht. Jetzt eine Frage:

    wenn ich jetzt so einen Komiker habe der sowas macht:

    Code
    <script type="text/javascript" language="Javascript">
    while( true )
    {
      alert("Haha!");
    }
    </script>



    Den Code entfernen.
    Sollte so gehen oder?

    Code
    $full = nl2br($tmp1).$tmp2.nl2br($tmp3);
    $full = eregi_replace("(.*)<script(.*)>(.*)</script>(.*)", "[URL='file://1%3Cbr%20/%3E//4']\\1<br />\\4[/URL]", $full);
     
    echo $full;



    Oder ?

    Mfg

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • Teron Gerofied
    Meister(in)
    Beiträge
    347
    • 25. November 2008 um 08:23
    • #4

    Ok, wzu frag ich eig. noch, irgendwie krieg ichs dann immer selbst hin :)

    Danke trotzdem.

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • pApAnoAh
    Schüler
    Reaktionen
    1
    Beiträge
    81
    • 25. November 2008 um 12:31
    • #5
    Zitat von Teron Gerofied

    Ok, wzu frag ich eig. noch, irgendwie krieg ichs dann immer selbst hin :)

    Danke trotzdem.

    Das ist gut, aber du solltest deine Lösung ins Forum posten, da irgendwann jemand anders an deinem Punkt stehen könnte und ihn genau diese Lösung weiterbringen könnte ;)

    Der frühe Vogel fängt den Wurm,
    aber die zweite Maus bekommt den Käse.

  • HolyMarcell
    Schüler
    Beiträge
    64
    • 26. November 2008 um 19:13
    • #6

    Aber du solltest bei deiner "<script> ...." Ueberlegung sofort bemerkten: Aha! Hier kann der Benutzer _ALLES_ eingeben.

    In dem Fall solltest du nicht einzeln verbieten (Durch RegEx) sondern einzeln erlauben! Sonst ist da auch superschnell PHP oder <iframe> oder was weiss ich drauf.

    MfG,

    //Immer schoen die Sicherheit beachten Papa...

    HolyMarcell :wink:
    http://www.holy-infos.de

  • The User
    Forum Guru
    Beiträge
    4.044
    • 26. November 2008 um 19:58
    • #7
    PHP
    $text = preg_replace_callback('~<style type="text/css">.*</style>~Ui', 'removeBr', $text);
    function removeBr(array $found)
    {
    return str_replace("<br/>\n", "\n", $found[0]);
    }


    Sollte klappen, hab mal ne BBCode-Engine gemacht. ;)

    Viele liebe Grüße
    The User

    Freiheit bedeutet mehr.

    "Mir ist die gefährliche Freiheit lieber als eine ruhige Knechtschaft."
    (Jean Jacques Rousseau)
    Mein Blog zum Programmieren, GNU/Linux etc.
    Free Chelsea Manning!
    Stolzer Nutzer von KDE, openSUSE und Qt.

Tags

  • html
  • color
  • style
  • background
  • text
  • funktion
  • entfernen
  • tag
  • php
  • array
  • tags
  • benutzer
  • sicherheit
  • lösung
  • script
  • iframe
  • css
  • filter
  • erlauben
  • beach
  • filtern
  • preg_replace
  • seperat
  • html filter
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
Zitat speichern