Badwordfunction

FCK-FAN

Mitglied
ich bin noch blütigeranfänger, ich wollte einen Badwordfilter machen.

ich will in ein gästebuch das ding einabuen wenn jetzt z.b jemand das wort "Sex oder drugs" eingibt soll der ganze beitrag nicht ins gästebuch eintetragen werden sondern das script per exit einfach abgebrochen werden. (ich will nicht das die Wörter erstetzt werden, davon habe ich schon genug scripts gefunden)

habt ihr so ein script?
 
Hi,

über unsere Suchfunktion und beispielsweise mit dem Suchbegriff "Badwords" oder auch "Badword-Filter" lassen sich unzählige Beispiel-Codes aufspüren.

Und beachte bitte den Punkt 15 der Netiquette bzgl. deiner durchgängigen Kleinschreibung - vielen Dank.

mfg Maik
 
Das kann man ganz einfach selber schreiben.

Du machst dir ein array (oder Datenbanktabelle) in welchem du alle Wörter speicherst die überprüft werden sollen. Array dürfte geschwindigkeitsmäßig schneller sein.

Dann brauchst du eine Funktion die der du den Inhalt eines Eintrags übergibst.

In dieser Funktion nutzt du z.B. preg_match und suchst nach allen Wörtern aus deinem BadWord-Array. Wenn es eine Übereinstimmung gibt, dann musst nur noch TRUE oder so zurückgeben.
In der Funktion, in welcher deine BadwordFilterFunktion aufgerufen wird (also auch da wo dann der Eintrag gespeichert wird) brichst du dann einfach ab, ohne den Eintrag zu speichern.
Ich empfehle die nicht eingetragenen Einträge zu loggen, sodass du sie dir anschauen kannst und ggf. noch nachträglich hinzufügen kannst.

e:/ was ich glatt zu langsam :eek:
 
nunja, loggen bedeutet eigentlich ja nur speichern.

Das heißt du schreibst die Einträge, welche nicht in die Datenbank für die Gästebucheinträge kommen, einfach in eine andere Tabelle oder in eine extra Textdatei.
Dann ist das ganze geloggt und du kannst dir die Einträge zu jeder beliebigen Zeit anschaun.

Ne andere Tablle wäre imho geschickter, dann brauchst einfach nur aus einer auslesen und falls du etwas doch in deinem GB haben möchtest einfach nur verschieben.
 
ok danke!

ich habs jetzt mal probiert aber irgendwie funktioniert es nicht ich glaub wegen dem array weil die nicht alle durchlaufen werden oder so

PHP:
	$badword = array("sex", "drugs", "casino", "gay" );
	if (preg_match("/$badword/i", "ich bin dumm und ich bin gay")) {
   echo "keine Spammer";
   exit;
} else {
   echo "Es wurde keine Übereinstimmung gefunden.";
}

eigentliche müsste ja "keine Spammer" rauskommen.
aber er gibt immer "Es wurde keine Übereinstimmung gefunden" aus
 
eigentliche müsste ja "keine Spammer" rauskommen.

preg_match liefert auch TRUE wenn er was findet. Damit ist es logisch:
PHP:
if (Bedingung erfüllt)
{
  // Dann
} else {
  // sonst
}

Die Blöcke umdrehen ODER ein "!" vor das preg_match reicht.
btw: du gibst zwei mal aus es sei keiner o,O

PHP:
$badword = array("sex", "drugs", "casino", "gay" );
	if (preg_match("/$badword/i", "ich bin dumm und ich bin gay"))

Das gibt ein Problem, dass in den anderen Threads schon besprochen wurde. Sowas wie "Unisex Handtasche" (ich weis, gehört verboten) ist ein normales Wort wird aber trotzdem gefunden und als "Böse" angesehen von deinem Script.
Oder wenn du so "Ar..ch" blocken willst dann darf keiner mehr "Barsch" schreiben.
Wie gesagt in den anderen Threads wurde das sicherlich bearbeitet.
 
PHP:
    $badword = array("sex", "drugs", "casino", "gay" );
    if (!preg_match("/$badword/i", "ich bin dumm und ich bin gay")) {
   echo "keine Spammer";
   exit;
} else {
   echo "Es wurde keine Übereinstimmung gefunden.";
}

mit "keine spammer" ist gemeint das hier keine Spammer erwünscht sind ;-)

jetzt gibt er aber andauernd aus "keine Spammer"
auch wenn ich des Satz "ich bin voll cool" schreibe ?

was hab ich falsch gemaccht?
 
Aha. Dann passt doch alles. Deine Bezeichnung war unglücklich gewählt.

PHP:
$badword = array("sex", "drugs", "casino", "gay" );

// nach Wörtern suchen, TRUE wenn gefunden, FALSE wenn nicht gefunden
$gefunden = preg_match("/$badword/i", "ich bin dumm und ich bin gay");

if ($gefunden) {
  echo "Hier sind keine bösen Wörter erlaubt!";
  exit;
} else {
  echo "Es wurde keine Übereinstimmung gefunden.";
}

Trotzdem, wenn einer einen Eintrag bei dir macht:
Code:
Ich bin auf meinem Schiff und höre das Lied "Oh! The Casino?" um
mich abzureagieren, weil mein Sextant gestern kaputt gegangen ist.
Deswegen sitze ich hier ein Tag in einem Kaff in Amerika fest und hier
gibt es nur eine Drogerie oder wie die sagen "Drugstore".

Dann ist dieser normale Text schon Spam wegen "Casino" und dem Bruchstück in "Sextant" bzw. "Drugstore".
Dazu auf jeden Fall die anderen Threads ansehen.
 
Zuletzt bearbeitet:
Danke Zodiac für die bemühung

es funktioniert aber immer noch nicht nicht
ich hab genau das von dir übernommen

obwohl "gay" im satz vorkommt gibt er immer noch
"Es wurde keine Übereinstimmung gefunden." aus :rolleyes:
 
Zurück