Badword - Liste

Naja eben die gängigen Wörter wie A-... usw.

Also das man nicht jedes Wort unterdrücken kann ist ja klar, aber ich suche einfach eine gängige Liste! :)
 
So, ich habs heute realisiert und zwar so:

PHP:
$blackwords = array();
$result = mysql_query("Select * FROM blackwords", $db);
while($row=mysql_fetch_assoc($result))
{
array_push($blackwords, $row[blackword]);
}
$message = str_ireplace($blackwords, "***", "$message");
$time = date("H:i");
$result = mysql_query("INSERT INTO chat (user, message, time) VALUES ('".$user."','".$message."','".$time."')", $db);

Kann man noch einbauen, dass das Wort durch soviele * ersetzt wird wie lang es ist?
 
Bastel ich dir mal mit kleinen Performance-Hinweisen:
PHP:
$blackwords = array();
// P: Feld angeben, is i-wie immer n tacken schneller
$result = mysql_query("Select `blackword` FROM `blackwords`", $db);
// P : dann kanns auch mysql_fetch_row nutzen ;) schneller
while($row=mysql_fetch_row($result))
{
  // P : $a[] = "foo"; ist das gleicht wie array_push für ein element
  // aber du wills ja die Sterne nach Länge:
  $blackwords[$row[0]] = str_repeat("*", strlen($row[0]));;
}
// sieh dir mal strtr bei php.net an. es ersetzt den key durch den wert (vom array-element)
// naja, eigentlich machen das alle (str_replace, preg_replace etc.) aber strtr hab bei der geschwindigkeit i-wie immer gewonnen ^^
$message = strtr("$message", $blackwords); // hab die anführungsstriche mal gelassen, haben bestimmt einen zweck in deinem script
// .... und dein rest

So hoffe klappt ;)
 
Zuletzt bearbeitet:
Jo super das klappt!

Sag mal kann man das noch so realisieren, dass es egal ist ob groß oder klein?

Ich möchte ungern alle Varianten in der DB speichern!
 
Ha. Du wirst lachen. Das ist mir vorhin beim Frühstück auch durch den Kopf gegangen das die Funktion strtr das nicht beachtet. Dicker Fehler von mir, Sorry!

Hier mit ohne Beachtung der Groß- / Kleinschreibung
PHP:
$blackwords = array();
$stars = array();
$result = mysql_query("Select `blackword` FROM `blackwords`", $db);
while($row=mysql_fetch_row($result))
{
  $blackwords[] = $row[0];
  $stars = str_repeat("*", strlen($row[0]));
}
$message = str_ireplace($blackwords, $stars, "$message");

Dieses i zeigt (sehr häufig) an das die Groß-/Kleinschreibung nicht beachtet wird ;)

Ich hab auch mal mir die Freiheit genommen einen unbuffered Query draus zu machen. Dann wird das Script fortgeführt, während mySQL noch die Datensätze sammelt (könnte man so sagen). Das Array wird also sofort mit dem finden des ersten Datensatzes erstellt, bis in $result Markiert ist das die Abfrage zuende ist. Ohne _unbuffered_ werden erst alle Daten gesammelt und dann darf PHP weitermachen.

In diesem Fall: http://phpperformance.de/gepufferter-und-ungepufferter-zugriff-auf-mysql-tabellen/

EDIT : unbuffered Query wieder rausgenommen, da dieser die Tabelle für kurze Zeit sperrt und du im anderen Beitrag geschrieben hast, es sei für einen Chat.
 
Zuletzt bearbeitet:
Zurück