mySQL Gästebuch: HTML Tags entfernen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • mySQL Gästebuch: HTML Tags entfernen

    Hallo!

    Ich schreibe grad an meinem eigenen Gästebuch.

    Das Ersetzten von Smilies ( aus : ) mach :) ) ist ja einfach:

    Quellcode

    1. ereg_replace(":)", "URL zum Smilie", $eintrag);


    Genauso kann man ja BBCode umsetzten (z.B. Fettdruck):

    Quellcode

    1. eregi_replace("[b]", "<b>", $eintrag);<br />eregi_replace(":)", "URL zum Smilie", $eintrag);


    Aber wie kann ich html-Tag entfernen?


    Naja, nach stöbern duch die Funktionen, um nach zu schauen, ob eregi_replace zwischen Groß- und Kleinschreibung unterscheidet, bin ich auf die Funktion preg_replace gestoßen, die um einiges schneller als ereg_replaye arbeiten soll.

    Außerdem kann ich dabei Arrays verwenden und muss deshlab nicht immer wieder ereg_replayce aufrufen.
    Beispiel:

    Quellcode

    1. <?
    2. $suchmuster = array("[b]", "[/b]", "[i]", "[/i]", "[u]", "[/u]");
    3. $ersatz = array("<b>", "</b>", "<i>", "</i>", "<u>", "</u>", );
    4. preg_replace($suchmuster, $ersatz, $eintrag);
    5. ?>

    Damit hätte ich den ganzen BBCode schon umgewandelt!
    Dasselbe gilt für Smilies.

    Nun habe ich mich aber immer noch gefragt, wie kriege ich den htmlcode raus, es soll ja nicht jeder beim posten einfach seinen eigenen Code ausführen können!

    Ein paar Zeilen weiter unten auf der Seite zu preg_replace auf php.net:

    Quellcode

    1. <?php
    2. // $dokument sollte ein HTML-Dokument enthalten.
    3. // Folgendes entfernt HTML-Tags, JavaScript-Abschnitte
    4. // und Leerräume. Außerdem wandelt es ein paar gängige
    5. // HTML-Entitäten in ihr Text-Äquivalent um.
    6. $suche = array ("'<script[^>]*?>.*?</script>'si", // JavaScript entfernen
    7. "'<[/!]*?[^<>]*?>'si", // HTML-Tags entfernen
    8. "'([
    9. ])[s]+'", // Leerräume entfernen
    10. "'&(quot|#34);'i", // HTML-Entitäten ersetzen
    11. "'&(amp|#38);'i",
    12. "'&(lt|#60);'i",
    13. "'&(gt|#62);'i",
    14. "'&(nbsp|#160);'i",
    15. "'&(iexcl|#161);'i",
    16. "'&(cent|#162);'i",
    17. "'&(pound|#163);'i",
    18. "'&(copy|#169);'i",
    19. "'&#(d+);'e"); // als PHP auswerten
    20. $ersetze = array ("",
    21. "",
    22. "\1",
    23. "\"",
    24. "&",
    25. "<",
    26. ">",
    27. " ",
    28. chr(161),
    29. chr(162),
    30. chr(163),
    31. chr(169),
    32. "chr(\1)");
    33. $text = preg_replace($suche, $ersetze, $dokument);
    34. ?>
    Alles anzeigen



    Also wäre meine Frage damit beantwortet.

    Danke php.net!


    So kanns gehen, wenn man etwas anderes sucht und die Antwort einem aus Versehen in den Schoß fällt! ;)
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • für das was du machst, würd ich sowieso keine replace funktion benutzen, die regex nutzt (also ereg(i)_replace und preg_replace), sondern [phpdoc]str_replace[/phpdoc]. ist schneller.

    und html-code entschärfen kannst du ganz einfach, indem du <> in &at; bzw. &gt; umwandelst.

    besser ist aber, du benutzt die funktion [phpdoc]htmlentities[/phpdoc]. dann ist der code auch w3c-valide und umlaute funktionieren auch auf amerikanischen pcs.