Check ob Kommentare HTML enthalten?

  • Hallo,

    ich würde gerne Kommentare via Snippet darauf kontrollieren, ob sie HTML enthalten. Ist dem so, sollte eine Error-Message mit wpdie ausgegeben werden.

    Weiß jemand wie das realisierbar ist, also der check auf HTML im Kommentar, bevor dieser gespeichert wird? Ich habe bislang nur Lösungen gefunden, die HTML einfach entfernen etc. aber mir geht es wirklich darum, dass Nutzer die HTML benutzten eine Nachrichten sehen "Error: Bitte nutze kein HTML in den Kommentaren" oder so etwas.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Habe gerade das hier gefunden:

    function remove_html_comments($content = '') {
    return preg_replace('/<!--(.|\s)*?-->/', '', $content);
    }

    Eigentlich müsste es nun doch die Möglichkeit geben, einen Kommentar auf die Attribute (/<!--(.|\s)*?-->/) zu prüfen und falls diese vorhanden sind ein wpdie auszugeben. Aber ich krieg es alleine nicht hin.

    if ('/<!--(.|\s)*?-->/', '', $content);
    wp_die( __('Bitte kein HTML nutzen!') );

  • Weiß niemand eine Möglichkeit?

    Mir fiel gerade noch ein, dass bb-code auch über die Tags kontrolliert werden könnte.
    Statt preg_replace müsste es halt einfach einen "check" geben und wenn dieser positiv ausfällt, gibt es die Error-Anzeige. Hat dazu nun vielleicht jemand eine Lösung parat?

    add_action('comment_text', 'bbcode', 2);
    function bbcode($comment) {
    $comment = preg_replace('/\[img\](.*?)\[\/img\]/s','<img src="$1" width="458" />',$comment);
    $comment = preg_replace('/\[b\](.*?)\[\/b\]/s','<strong>$1</strong>',$comment);
    $comment = preg_replace('/\[u\](.*?)\[\/u\]/s','<u>$1</u>',$comment);
    $comment = preg_replace('/\[i\](.*?)\[\/i\]/s','<em>$1</em>',$comment);
    $comment = preg_replace('/\[s\](.*?)\[\/s\]/s','<del>$1</del>',$comment);
    $comment = preg_replace('/\[url=(.*?)\](.*?)\[\/url\]/s','<a target="_blank" href="$1" title="$2">$2</a>',$comment);

  • Ich hätte Dir ja geantwortet, nur habe ich mich bisher nicht mit den Kommentaren beschäftigt und somit weiß ich nicht genau, was da WP von sich aus bereits filtert. Einiges wird zumindest bereits gefiltert und eigentlich sollten da nur diese erlaubten HTML-Tags durchschlüpfen, die bei den Standard-Themes unter den Formularen aufgeführt werden. Oder irre ich mich?

    Wenn Du noch mehr möchtest, würde ich eventuell die Umkehrung wählen und nur erlaubte Zeichen durchlassen.

    Code
    [^a-zA-ZäöüÄÖÜß0-9.,:;!?\s+_-]

    Andere Aufgabe, gleiches Prinzip, weil mir die Suche zu lasch filterte:

    http://www.coder-welten.com/wp-sucheingabe…tzlich-filtern/

    BBCode geht natürlich auch, würde ich jedoch eventuell nur dort benutzen, wo Formatierungen im Text nicht fehlen dürfen. Wenn Du es so schreibst (.*?), so würde der Punkt in der Klammer zum Metazeichen für beliebige Zeichen und somit auch für spitze Klammern stehen, womit die wieder durchrutschen könnten.

  • Was ich mit dem verlinkten Beispiel meinte, es genügt, wenn bei unerlaubten Eingaben ein Hinweis wie 'Wie bitte?' ausgegeben wird. Es ist nicht erforderlich, nun genau darauf hinzuweisen, was falsch gemacht wurde oder welche unerlaubten Zeichen benutzt wurden. Wer Fehler genau angezeigt bekommt, der könnte versuchen diese zu umgehen.

  • Genau diese Standard-Tags möchte ich komplett verbieten. Ich möchte, dass jeder der die Standard-Tags oder mögliches HTML nutzt, einen Fehler bekommt.

    Nur weiß ich eben nicht, wie ein Snippet genau aussehen müsste. Hast du nicht irgendeine Idee oder einen Vorschlag? Kann man je relativ leicht testen, ob HTML-Code danach noch geht oder nicht. Das wichtige ist eben der Fehler, nicht einfach ein bereinigen. Alle gefundenen Lösungen geben keinen Fehler aus, sondern ignorieren das HTML einfach bzw. entfernen die Tags. Aber mir geht es darum, dass ein Fehler ausgegeben wird.

  • Habe mich mal kurz durchgewurschtelt, meiner Meinung nach könntest Du da direkt in der wp-comments-post.php im Hauptverzeichnis angreifen und die $comment_content überprüfen und bei Fehlern mit wp_die einen Hinweis ausgeben.

    Kann es ja mal probieren, ob ich da ein schnelles Beispiel fertig bekomme, ohne dass es mit einer weißen Seite endet. Den ganzen Tag wollte ich mich heute jedoch nicht daran aufhalten. Vielleicht klappt es ja. Sicher gibt es auch Plugin-Lösungen oder Lösungen für die functions.php, doch ehe ich mich da wieder durchgewurstelt hätte, würde einige Zeit beanspruchen.

  • Hat unter Localhost funktioniert!


    Ist aber wie gesagt nur ein schnelles Beispiel, welches noch richtig ausgebaut werden könnte. Oberhalb von den Rauten ist der Original-Code aus der wp-comments-post.php, zwischen den Rauten mein Testcode.

    Wird hier leider nur wieder mit Zeilenumbrüchen angezeigt, die so nicht vorhanden sind.

  • Also, in der wp-comments-post.php bei Version 3.6 ab Zeile 54 einfügen, über der Zeile:

    // If the user is logged in

    Bei den Tests unter Localhost funktionierte es zumindest. Wichtig ist dabei, dass die Datei auch als UTF-8 ohne BOM gespeichert wird, sonst erhältst Du Matsch bei den Umlauten.

    Und nun fehlt eigentlich nur noch formateins oder ein anderer, der einen Tipp geben könnte, wie Du das über eine Funktion in der functions.php oder als Plugin regeln könntest. Doch so geht es halt auch.

    Einmal editiert, zuletzt von Melewo (10. September 2013 um 16:17)

  • Muss ich morgen mal testen. Du bist echt super. Core-Dateien verändern ist halt immer so eine Sache, jetzt mal schauen ob das irgendjemand für die Functions.php hinbekommt.

    Wer das morgen mal testen und schauen. Danke jedenfall vielmals für die Hilfe, such jetzt schon Tagelang nach einer Lösung und finde kaum Hinweise oder Wege. Ist halt auch immer schwer, wenn man das alles selbst nicht gelernt hat :) Danke jedenfalls.

  • Mir ist noch eingefallen, ich hatte das nur mit einem Einzeiler getestet, da ein Kommentar aber länger ist, es könnte sein, dass außer dem i hinter / noch ein s als Modifier benötigt wird. Schreibe da mal lieber ]/is" am Ende des Musters.

    Dass Du von diese Datei vorher eine Kopie beiseite legst, die Du notfalls gleich wieder per FTP hochschieben kannst, wirst Du wohl nicht vergessen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!