Badword filter

Nici

Erfahrenes Mitglied
Hallo,

ich habe ein Gästebuch gebaut und weißjetzt nicht wie ich einen Badwordfilter einbauen kann. Und ist es mit DB effizienter falls ja, wie programmiere ich soetwas?

Ich habe z.B diese Funktion gefunden, weiß jedoch nicht wie und wo ich es einbinden muß.

PHP:
// Vorhandener Text 
$text = "Diese Seite ist einfach geil"; 

function bad_word($text){ 
    // Hier werden die verbotenen Wörter 
    // und die Alternative angegeben 
    $bad_words = array( 
        "geil" => "genial", 
        "fuck" => ".....", 
    ); 
    // Ersetzungsschleife 
    foreach ($bad_words AS $key => $value){ 
        $text = str_replace($key, $value, $text); 
    } 
    return $text; 
} 

// Aufruf der Funktion bad_word 
$text = bad_word($text); 

// Ausgabe 
echo $text;

Vielen Dank

Gruß Nici
 
Zuletzt bearbeitet von einem Moderator:
Bei einen Wortfilter gibt es grundsätzlich mehrere Methoden:
Soll er die Wörter durch andere ersetzen, oder durch Zeichen, beispielsweise Sternchen.

Dann musst du dir überlegen, ob du über die einfache Weise per str_replace (was weniger vorteilhaft ist. Bsp: du willst das Wort "s ex" herausfiltern. Das macht dir natürlich auch Wörter wie "Gratisexemplar" kaputt macht.), oder lieber doch die bessere Variante mit den PCRE (preg_replace.

Die einfachere Möglichkeit mit str_replace könnte so aussehen (in dem Fall wird alles durch Sternchen ersetzt):
PHP:
function filterWords( $inp_string )
{
    $badwordarray = array("schlechtes wort", "boeses wort", "shit");
    foreach( $badwordarray as $badword) {
        $inp_string = str_replace($badword, str_repeat("*", strlen($badword), $badword);
    }
    return $inp_string;
}

Zweite Möglichkeit mit PCRE.
Ohne zusätzliche optionen hat preg_replace den gleichen Effekt wie str_replace, ist sogar etwas langsamer.
Die Stärke dieser Funktion ist die Möglichkeit, eben nur ganze Wörter zu ersetzten.
Dazu brauchst du noch eine Variable, in der alle Zeichen enthalten sind, von denen ein Wort begrenz werden kann.
Die Funktion könnte ungefär so aussehen:
Code:
function filterWords( $inp_string )
{
    $wordlim = "\]\[\.!\?-+<>(){}";
    $badwordarray = array("schlechtes wort", "boeses wort", "shit");
    foreach( $badwordarray as $badword) {
        $inp_string = preg_replace("/(".$wordlim.")(".$badword.")(".$wordlim.")/eisU",
            "$1str_repeat('*', strlen('$2'))$3", $inp_string);
    }
    return $inp_string;
}
Bin mir nicht sicher, ob das zweite Besipiel funktioniert.

hth
 
Zuletzt bearbeitet von einem Moderator:
Zurück