Benutzer Beitrag
21:09 5. September 2011
nuelle
New Member
Beiträge 8
Ich möchte in eine Suchfunktion eine Blacklist einbinden und hab mir dazu folgendes überlegt:
$blacklist = array("badword1", "badword2", "badword3", "badword4");
if (in_array($keyword, $blacklist))
{
echo $keyword . " ist Blacklisted!<br/>\r\n";
}
else
{
echo $keyword . " ist Valide!<br/>\r\n";
}
Funktioniert auch soweit, solange die Badwords genau so vorkommen.
Wie muß ich den Code erweitern, um auch variationen der badwords mit abzudecken ?
Also "das badword1" … gibt es da irgendwie sowas mit "*badword1" oder so ?
15:50 6. September 2011
Brainstorm
Admin
Beiträge 46
Moin moin,
Du willst (wenn ich es richtig verstanden habe) überprüfen, ob ein String eine bestimmte Zeichenkette enthält.
Schau Dir mal den regulären Ausdruck preg_match an.
grüße
Der Glaube fängt an, wo das Wissen aufhört.
17:01 10. September 2011
Andy
New Member
Beiträge 3
Hallo,
ungetestet:
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($badword, '#')) . ")\b#i", $keyword)){
echo $keyword . " ist Blacklisted!<br/>\r\n";
}
Gruß Andy
22:51 10. September 2011
nanos
Deutschland
New Member
Beiträge 16
Hallo,
@Nülle,
ich kann dein Problem nicht verstehen.
Willst Du gesperrte Wörter dynamisch erkennen lassen?
Wer einschläft mit Popo der kratzt, der aufwacht mit Finger der stinkt.
20:15 13. September 2011
nuelle
New Member
Beiträge 8
Danke für eure Antworten und Sorry, das ich mich jetzt erst melde… hab viel Streß und kaum Zeit.
Nochmal wozu das ganze ist:
Ich hab eine Suchfunktion und möchte gern die Treffer zu diesen Badwords nicht anzeigen lassen, sondern stattdessen eine Textanzeige.
Die Lösung mit preg_match verarbeitet doch kein Array oder ?
22:48 13. September 2011
Brainstorm
Admin
Beiträge 46
Beitrag 22:49 – 13. September 2011 bearbeitet von Brainstorm
Hi Nülle,
Du müsstest Dein Badwordarray mit einer Schleife durchlaufen lassen.
Innerhalb der Schleife kannst Du ja die Begriffe miteinander vergleichen, oder Schalter setzen etc..
Pseudocode
$badwordarray; //enthält Daten aus der Datenbank, oder zb. einer Textdatei
//Array durchlaufen
for($i=0; $i < count($badwordarray);$i++){
// jetzt nehme ich mal den ungetesteten Code von Andy
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($badwordarray[$i], '#')) . ")\b#i", $keyword)){
echo $keyword . " ist Blacklisted!<br/>\r\n";
break;
}
}
Nur mal als Beispiel. Du hast doch sicher eine lokale Testumgebung?.
Vielleicht ist die Funktion stristr() besser für Dein Vorhaben geeignet, als preg_match .
gruß
Der Glaube fängt an, wo das Wissen aufhört.
12:05 15. September 2011
nuelle
New Member
Beiträge 8
So gehts jetzt…
$badwordarray = array("badword1", "badword2", "badword3");
for($i=0; $i < count($badwordarray);$i++){
if (preg_match("/(".str_replace("\*",".*?",preg_quote($badwordarray[$i],'#')).")/i",$keyword)){
echo $keyword . " ist Blacklisted!<br/>\r\n";
break;
}
}
Er unterscheidet Groß- und Kleinschreibung und erkennt auch Wortvariationen..
Ich danke euch für eure Hilfe und Denkanstöße…
20:10 15. September 2011
Brainstorm
Admin
Beiträge 46
Beitrag 20:53 – 22. September 2011 bearbeitet von Brainstorm
Bis zum nächsten Problem.
Brainstorm
Der Glaube fängt an, wo das Wissen aufhört.