Wortfilter

Online-Skater

Erfahrenes Mitglied
Ich habe einen Wortfilter gebastelt der auch funktioniert, zumindest bei mir lokal.
PHP:
// Wortfilter
    $obscenities = @file("liste.txt");
    foreach ($obscenities as $curse_word)
    {
      $bad_word = trim($curse_word);
      $stars = "";
      if (stristr($text,$bad_word))
      {
        $length = strlen($bad_word);
        for ($i = 1; $i <= $length; $i++)
        {
          $stars .= "*";
        }
        $text = str_ireplace($bad_word,$stars,$text);
      }
    }

Das Problem ist, dass die Funktion str_ireplace erst ab php5 geht und mein Webspace diese Version dementsprechend noch nicht hat. Somit funktioniert dieses Script nur bei exakter Schreibweise, wobei das wirklich uneffektiv ist. Deswegen meine Frage wie könnte man das am besten lösen, ohne diese Funktion, wenn ich in meiner liste.txt nur kleingeschriebene Wörter habe. Mit eregi usw ist mir das nicht gelungen aus mangelndem Wissen wahrscheinlich, vielen Dank für eure Lösungsvorschläge schon mal.

mfg
 
Probier statt der str_ireplace-Funktion mal die preg_replace()-Funktion:
PHP:
// Wortfilter
$obscenities = @file('liste.txt');
foreach( $obscenities as $word ) {
	$word = trim($word);
	$pattern = '/\b' . preg_quote($item, '/') . '\b/si';
	$text = preg_replace($pattern, str_repeat('*', strlen($word)), $text);
}
 
Erstmal Danke Gumbo für die Lösung, ich habe sie ausprobiert, aber leider funktioniert es nicht ganz.
Es wird vor und nach jedem Wort 6 Sterne ausgegeben und der einizge html-Befehl <br> ist auch zu sehen.

Bsp. Ausgabe
Code:
******Ich****** ******nehme****** ******Viagra****** ******du****** ******Hurensohn******, ******scheiss****** ************ ******du****** ******verpiss****** ******dich****** ******bloß****** ******du****** ******nutte****** ******eh****** ******verdammter****** ******pisser******

Das ist mein Beispieltext und in der Liste steht erstmal nur "viagra".
Da ich die preg_replace Funktion noch nicht verstehe bitte ich um Hilfe, ich werde sie morgen genaustens studieren, bis denne THX
 
Hallo,

beim Entwickeln von PHP-Skripten sollte man die Fehlermeldesensitivität immer möglichst hoch stellen, um eventuelle Unstimmigkeiten leichter zu erkennen. Dazu einfach in der php.ini die Zeile mit error_reporting = suchen und hinter das Gleichheitszeichen ausschließlich E_ALL setzen. Alternativ kann man diese Einstellung auch in einzelnen Skripts setzten, indem man error_reporting(E_ALL); aufruft.

In diesem Fall wäre wohl eine Meldung der Art „PHP Notice: Undefined variable: item […]“ aufgetaucht. Der Grund hierfür ist, dass Gumbo – vermutlich absichtlich, um dich zu testen ;) – die undefinierte Variable $item anstatt $word verwendete. Wenn du dies entsprechend korrigierst, sollte das Problem nicht mehr auftreten.

Grüße,
Matthias
 
Hehe ihr Schlingel :p

Also ich muss dazu sagen, das ich mich auch erst wunderte was die Variable $item da zu suchen hat, aber aufgrund meines tiefen Respekts gegenüber Gumbo hab ich mich dann doch dazu hinreißen lassen, dies nicht als Test anzusehen, sondern als Vertrauensgeschenk ;)

Vielen Dank nochma ich studiere mal die heftige funktion ;-]
 
PHP:
<?php
function bad_wort($text) {
		$text = str_replace('hurensohn',  '*******', $text);
                $text = str_replace('f-i-c-ken',  '*******', $text);
    return $text;
  }
?>
Ich habe mir eine filter funkion damals gebaut $text.... einfahc drunter fügen vor dem retrun $text und welche wörter du sperren willst ist so ganzeinfach da wo er das ausgibt musst du vor dem dann die funkion eingesetzt werden z.b bad_wort(MYSQLOUT Parameter)
 
Zuletzt bearbeitet:
Hättest du bitte VORHER mal aufs Darum gucken können ?

25.05.2006

Das ist weder angemessen sich extra für so einen Post zu registrieren als auch die Tatsache selbst du schon beim lesen hättest drauf aufmerksam werden müssen das es mitlerie PHP5.3 gibt und fast jeder Hoster es heutzutage hat ..

Boar wie ich solch 1-Post-User hasse ...
 
Es ging DAMALS darum eine Variante zu finden für einen Hoster auf dem eben KEIN PHP5 lief ... weil besagte Funktionen erst mit PHP5 eingeführt wurden ...

Und wie gesagt : VORHER aufs Datum gucken ... nicht erst wenn man drauf hingewiesen wird.
 
Zurück