file() Badwordliste

truderich

Mitglied
Hi, ich habe ein für euch warscheinlich sehr banales Problem.

Ich möchte für mein Gb eine "Badwordliste" erstellen.. Diese sieht so aus
HTML:
schlimmes wort
schlimmees wort
noch ein schlimmes wort
...
...
Das Skript dazu ist folgendes
PHP:
$datei=('spam.txt');
		$word_filter=file($datei);
		foreach($word_filter as $wf) if(strpos($_POST['beitrag'],$wf)>-1)
		$notes['error'][] = 'Spam, Pornographie, Werbung und Junk werden auf dieser Webseite unterbunden !';
getestet habe ich das ganze am Anfang so
PHP:
$word_filter=Array('viagra','levitra','cialis');
        foreach($word_filter as $wf) if(strpos($_POST['beitrag'],$wf)>-1)
        $notes['error'][] = 'Spam, Pornographie, Werbung und Junk werden auf dieser Webseite unterbunden !';
also mit den einzelnen Worten. Das funktioniert einwandfrei..
Warum geht es aber mit der "spam.txt" Datei nicht
.
.
Gruss Dieter
 
Zuletzt bearbeitet:
Hi, das mache ich mit "trim" oder? Aber wie...ich sehe keine Zeilenendzeichen..
PHP:
$datei=('spam.txt');
		$word_filter=file($datei);
		$datei = trim($datei);
		foreach($word_filter as $wf) if(strpos($_POST['beitrag'],$wf)>-1)
		$notes['error'][] = 'Spam, Pornographie, Werbung und Junk werden auf dieser Webseite unterbunden !';
		var_dump ($wf);
.
.
.
Gruss Didi
 
Zuletzt bearbeitet:
Hi, ok
Und wie bereits erwähnt, müsstest du diese Zeichen aus den einzelnen Array-Elementwerten entfernen.
nunja das habe ich wohl begriffen;-) aber wie? Nicht mit trim, das habe ich probiert etwa mit \r\n ? ein paar kleine Tipps brauche ich noch:p
.
.
Gruss Dieter
 
Hi, EDIT Jippi ich habe es..es war diese Zeile
PHP:
foreach($word_filter as $wf) if(strpos($_POST['beitrag'],$wf = trim($wf))>-1)
stimmts?
jetzt klappt es

.
Gruss Didi
 
Zuletzt bearbeitet:
Hallo,

etwas unkonventionell, würd ich mal sagen ;)

Ich würde das entweder so formulieren:
PHP:
<?php

$datei = 'spam.txt';
$word_filter = file($datei);
foreach($word_filter as $wf) {
	$wf = trim($wf);
	if(strpos($_POST['beitrag'],$wf) !== false) {
		$notes['error'][] = 'Spam, Pornographie, Werbung und Junk werden auf dieser Webseite unterbunden !';
	}
}

?>
…oder gleich so:
PHP:
<?php

$datei = 'spam.txt';
$word_filter = array_map('trim', file($datei));
foreach($word_filter as $wf) {
	if(strpos($_POST['beitrag'],$wf) !== false) {
		$notes['error'][] = 'Spam, Pornographie, Werbung und Junk werden auf dieser Webseite unterbunden !';
	}
}

?>

Grüße,
Matthias
 
Hi, hm ich bin nicht sehr bewandert in php. Ich habe seiner Zeit ewig an meinem Gb gesessen.. Und solche Schutzeinrichtungen übersteigen einfach meinen Zeitrahmen..(Ich bin auf Montage)

Aber gut ich glaube Dir;-) kannst du mir verklickern warum statt >-1 das ==false und dann noch mit "!"
Das mit trim habe ich kapiert, du generierst sofort die ganze Anweisung, klar eigentlich.. Aber das andere habe ich noch nicht verstanden..
.
.
Gruss Didi
 
Hallo!

truderich hat gesagt.:
Aber gut ich glaube Dir;-) kannst du mir verklickern warum statt >-1 das ==false und dann noch mit "!"
== ist der Vergleichsoperator, != der negierende Vergleichsoperator. Werden mit diesen zwei Werte verglichen, greift in PHP die automatische Typumwandlung. Zwei Werte können also trotz unterschiedlichem Typ (z.B. Ganzzahl und Zeichenkette) gleich sein. So gibt beispielsweise 0 == false ein true zurück.

Problematisch wird das ganze dann, wenn 0 und false unterschiedliche Bedeutungen haben. Beim Rückgabewert von [phpf]strpos[/phpf] ist dies der Fall: wird 0 zurückgegeben, so bedeutet das, dass die gesuchte Zeichenkette an Position 0 gefunden wurde. Ein false als Rückgabewert signalisiert dagegen, dass die Zeichenkette nicht gefunden wurde. So ergibt strpos('foobar asdfjklö', 'foobar') != false den Wahrheitswert false – obwohl die Zeichenkette 'foobar' ja eindeutig in 'foobar asdfjklö' vorkommt.

Abhilfe schaffen hier die typsicheren Vergleichsoperatoren === und !==. Ersterer gibt nur true zurück, wenn die Werte auf beiden Seiten sowohl in ihrem Typ als auch in ihrem Inhalt übereinstimmen. !== ergibt true, wenn sich die beiden Werte in Typ oder Inhalt unterscheiden (oder beides).

Schreibt man also strpos('foobar asdfjklö', 'foobar') !== false, so ergibt das wirklich nur dann true, wenn [phpf]strpos[/phpf] nicht false zurückgibt.

Noch Fragen? ;)

Grüße,
Matthias
 
Zurück