Badword - Liste

Sasser

Erfahrenes Mitglied
Hallo Leute!

Ich habe in einer DB eine Tabelle mit `blackwords` inder Blackwords aufgelistet sind.

Nun möchte ich gern die Variable $message effektiv nach diesen Wörtern durchsuchen und wenn ein Wort gefunden wurde jedes Zeichen durch ein * ersetzen!

Wie gehe ich am besten vor? Könnt ihr mir einen Ansatz geben? :confused:
 
Zuletzt bearbeitet:
PHP:
$badwords = array('doof', 'eklig');
$message = 'hering ist doof und eklig';

echo str_replace($badwords, '*', $message);
 
Was haltet ihr von der Lösung?

PHP:
$result = mysql_query("Select * FROM blackwords", $db);
while($row=mysql_fetch_assoc($result))
{

$var = str_replace($row["blackword"], "***", "$var");

}

Oder ist die eher uneffektiv?
 
Hi,

ich würde das eher in eine Textdatei packen. In jede Zeile ein Wort, dann kann man das mit file() in ein Array lesen und kann mit str_replace ersetzen. Sind genau 2 Anweisungen.

LG
 
Aus Performancegründen würde ich erst alle Badwords in einem Array sammeln bei deiner variante und dann str_replace nur einmal aufrufen.

Aber warum in einer SQL? Wenn du es schnell und von jedem änderbar haben willst nimm eine einfache Datei. Jede Zeile ein Wort. Auslesen mit... ähm... dem Befehl um aus den Zeilen einer Datei ein Array zu machen... glob, file?

EDIT: kuddel klaut gedanken :p
 
Also Google bietet einiges.
Leider englisch aber durch den Google-Übersetzer gejagt hast bestimmt ein paar.

Als Hinweis:
Hier im Forum ist zum Beispiel das Wort: "SCHElßE" verboten.
@kuddel: Die Macht der bösen Wörter er hat ^ ^

Allerdings ist es immer schwer Abwandlungen zu erkennen.
Z.B. das Wort: "Eistee"
Abwandlungen: E1stee, 315T33 (für ganz bekloppte :D)

Die Funktion levenshtein() kann da helfen. Zum Beispiel lässt du dir alle Abwandlungen die 3 oder weniger entfernt sind in einer seperaten Datei von PHP speichern. Die kanns ab und zu mal angucken und welche auf die Whitelist und welche auf die Blacklist setzen ;)
Ist allerdings auch eine sehr zeitintensive Funktion bei langer Liste und/oder großen eingegebenen Text.
 
Zuletzt bearbeitet:
Zurück