Badwordfilter

bomberpilotmp3

Erfahrenes Mitglied
Hallo,

habe eine Komplexere Frage an auch. Ich habe ein Badwortfilter, den ich dazu verwenden möchte, das sich die Benutzer bei mir im Beitrag nicht beleidigen. Nun habe ich da etwas zusammengebastelt, funktioniert auch, nur das Problem:

Ein Badwort ist: Hund
Der Satz vom Benutzer Hundehalzband

Er schhlägt schon alarm. Das möchte ich nicht. Ich möchte das er wirklich nur die Wörter filtert, die auch so geschrieben sind. Bei Hund sollte er auch nur wirklich Hund filtern und nicht Hundehalsband.

Mein Code (ist ein Simpler und schnell zusammengebauter Code):
PHP:
function ___checkbadword ($___badword) {
    $badword_array = '(pisser|spast|kiddy||wichser|wixxer|hurensohn|hundesohn|huresohn|bitch||missgeburt||';
    $badword_array.= ' fuck|kanacke|bastard|spacken|nutte|nutten|missgestalt|huren|hure|schlampe|arschlöcher|votzen|fotzen)';

    if (empty($___badword)) {
       return FALSE;
    } elseif (!preg_match('/'.$badword_array.'/', strtolower($___badword))) {
        return FALSE;
    } else {
        return TRUE;
    }
}


Hat jemand eine Lösung?
 
Zuletzt bearbeitet:
Effektiv ist das nur sehr schwer zu machen, da das alleinige Vorkommen einer Zeichenkette in einem Wort nicht auf die Bedeutung des gesamten Worts schließen lässt, gerade auch wenn es sich um mehrdeutige Begriffe handelt.
Denn damit wären auch harmlose Wörter wie Nachttischlampe, Lachspasta oder eben Hundehansband nicht erlaubt.
 
Ah okay, also ist nach nicht so möglich, bzw wäre möglich aber nur mit viel Aufwand? Naja, dann lass ich es lieder draussen. Danke
 
Hier mal eine gaaanz simple Lösung, die ich auch benutze. Bringt halt nichts bei Tippfehlern, aber besser als nichts:
PHP:
    $badword_array = array( 'pisser','spast','kiddy','wichser','wixxer','hurensohn','hundesohn' );
    $formular = strtolower( $_POST['form_textarea'] );
    $badword_counter = 0;
    $words = explode( ' ', $formular );
    foreach( $words AS $var )
    {
        if( in_array( $var, $badword_array ) )
        {
            ++$badword_counter;
        }
    }
 
Idee:

Wenn du nur einzelen Wörter Filtern willst dann änder dein Pattern. Füg links und rechts \s ein was ein leerzeichen oder zeilenumbruch bedeutet.

'/\s'.$badword_array.'\s/'

So findet er nur " Hund " aber nicht "Hundehalsband"

Weis aber nicht ob die Lösung von mir oder von Loomes schneller ist.

Möglich ist auch noch str_replace() und strtr()
 
Zurück