Badwordfilter geht nicht!

djandy

Mitglied
Hallo Leute,

habe mir einen Badwordfilter gebaut der geht auch aber nicht wenn ich eine externe Textdatei benutze um die Wörter einzulesen. Warum?

Hier der komplette Code:

PHP:
 function badwordfilter($text) { 
 
	$words = file('inc/badwords.txt'); 
	$badwords = explode(",", $words); 
	for($i=0;$i<count($badwords);$i++) { 
		$text = str_replace("$badwords[$i]","*zensiert*",$text); 
	} 
	return $text; 
}

Was stimmt da nicht? Hoffe ihr könnt mir helfen.

Gruß Andy
 
ich glaub hier liegt der fehler

$text = str_replace($badwords[$i],"*zensiert*",$text);

der erste parameter sollte glaube ich nicht in anführungszeichen stehen da dies ein variable ist
 
versuche es mal mit eregi()

function badwordfilter($text) {

$words = file('inc/badwords.txt');
$badwords = explode(",", $words);
for($i=0;$i<count($badwords);$i++) {
$text = eregi("$badwords[$i]","*zensiert*",$text);
}
return $text;
}
 
Lies dir ma hier das Tutorial zu Regulären Ausdrücken (Regular Expressions) durch.. ohne die wirst du nie einen effektiven Wordfilter bauen können weil du z.b. zusammengesetzte badwords nicht erkennst oder bestimmte fälle wo z.b. "ass" in nem wort vorkommt nicht ausschließen kannst..

HF... RegExp sind ein lustiges Gebiet.. ich mag sie *RegExpknuddel* ;)

MfG Dominik
 
PHP:
function badwordfilter($text) { 

    $words = file('inc/badwords.txt'); 
    $badwords = explode(",", $words); 
    for($i=0;$i<count($badwords);$i++) { 
        $text = str_replace(trim($badwords[$i]),"*zensiert*",$text); 
    } 
    return $text; 
}

müsste funktionieren.
trim entfernt so Zeichen wie \0 oder \n am Zeilenende...
 
Nein, das wird mit Sicherheit nicht funktionieren. Schaut euch doch einfach mal den Link an, den ich gepostet hab, und überlegt, was daran falsch sein könnte. :rolleyes:
 
Du bist ja sehr hilfsbereit...
Nein, das wird mit Sicherheit nicht funktionieren. Schaut euch doch einfach mal den Link an, den ich gepostet hab, und überlegt, was daran falsch sein könnte.
Sehr nett von dir...

Entweder das:
Alle Wörter in einer Zeile, getrennt von einem Komma.
PHP:
function badwordfilter($text) {

    $words = file('inc/badwords.txt');
    $badwords = explode(",", trim($words[0]));
    for($i=0;$i<count($badwords);$i++) {
        $text = str_replace($badwords[$i],"*zensiert*",$text);
    }
    return $text;
}

Oder das:
Jedes Wort in einer eigenen Zeile.
PHP:
function badwordfilter($text) {

    $words = file('inc/badwords.txt');
    for($i=0;$i<count($words);$i++) {
        $text = str_replace(trim($words[$i]),"*zensiert*",$text);
    }
    return $text;
}

Und was sagt Oliver jetzt dazu?!
Und wenns jetzt immer noch nicht stimmen sollte, berichtige mich bitte und gibt nicht nur eine so blöde antwort...
Sorry, aber sowas macht mich etwas sauer...
Dein Post ist keine Hilfe sondern nervt nur!
 
um noch mal das problem zu erklären:
dein problem kommt vermutlich durch die funtion file($datei)....
diese gibt einen array aller zeilen der $datei zurück.
sieht eine datei z.b. so aus:

beispiel.txt
######################
11
12
14
666

wwwg w
######################

dann gibt file(beispiel.txt) einen array zurück, der wie folgt aussieht:

0 => "11"
1 => "12"
2 => "14"
3 => "666"
4 => ""
5 => "wwwg w"
(die " sollen bedeuten, dass die inhalte des arrays strings sind)

wenn du dann explode(",",$words) aufrufst, dann wird versucht, einen array an den "," zu teilen.
das geht natürlich nicht.
da php aber da sehr kulant ist, wird kein fehler ausgegeben, sondern der array vermutlich nur als leerer string bearbeitet.
wenn die worde also in der ersten zeile der datei stehen, dann musst du explode(",",$words[0]) aufrufen.

//greets
//bad taste
 
Zurück