Sobald Sie eine gute MYSQL-Tabelle mit einigen schlechten Wörtern haben, die Sie filtern möchten (ich habe mit einem der Links in diesem Thread begonnen), können Sie etwas wie folgt tun:
$errors = array(); //Initialize error array (I use this with all my PHP form validations)
$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.
$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD'). All your values in the profanity table will need to be UPPERCASE for this to work.
$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation). Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.
$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.
$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).
$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution. Make sure you replace Z's with S's in your profanity database for this to work properly. Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'. The profanity table should have the "rendered" version of the bad words.
$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input. You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.
if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.
//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";
Ich bin mir sicher, dass es einen effizienteren Weg gibt, all diese Ersetzungen vorzunehmen, aber ich bin nicht schlau genug, um das herauszufinden (und das scheint gut zu funktionieren, wenn auch ineffizient).
Ich bin der Meinung, dass Sie die Registrierung der Benutzer zulassen sollten und die Menschen dazu benutzen sollten, die Tabelle der Schimpfwörter zu filtern und nach Bedarf zu ergänzen. Allerdings hängt alles von den Kosten eines falschen Positivs (ein gutes Wort wird als schlecht markiert) gegenüber einem falschen Negativ (ein schlechtes Wort kommt durch) ab. Das sollte letztendlich bestimmen, wie aggressiv oder konservativ Sie bei Ihrer Filterstrategie vorgehen.
Ich würde auch sehr vorsichtig sein, wenn Sie Wildcards verwenden wollen, da sie sich manchmal lästiger verhalten können, als Sie beabsichtigen.
15 Stimmen
Es ist eine Schande, dass alle Top-Antworten existenzielle und defätistische Ablenkungen von der Programmierherausforderung sind. Angesichts der zunehmenden Bedeutung von "Cyborg"-Computerdiensten wie Mechanical Turk und der Tatsache, dass fast jede Software zu einer sozialen Plattform wird, ist es wichtiger denn je, eine Heuristik zu haben, um Inhalte mit einer roten Markierung zu versehen und sie einem Moderator zur Kenntnis zu bringen!
12 Stimmen
Bitte achten Sie auf den Sprachkontext, besonders wenn Sie i18n machen. Ich habe einmal versucht, eine Google-Gruppe für einen Kurs namens "Sanal ortamda görsellestirme" einzurichten, was auf Türkisch "Visualisierung in virtuellen Medien" heißt. Google war dumm genug, es abzulehnen. weil der Titel das Wort "anal" enthielt . Sanal[tr]=Virtual[en] und Google beschuldigte mich schamlos der Gotteslästerung! :D Bitte lassen Sie nicht zu, dass solche seltsamen Dinge passieren.
0 Stimmen
Wie wäre es, wenn Sie nach dem Wort suchen in Spanisch ? Sie können den Google-Bilder-Filter auf diese Weise umgehen (wenn Sie in einer anderen Sprache lokalisiert sind).
0 Stimmen
Ein weiterer Vorschlag wäre, diese Wörter NICHT zu verbieten, sondern die Benutzer, die sie verwenden, zu registrieren. Wenn ein Benutzer/IP mehr als 2, 3 oder was auch immer Sie wollen, bekommt, dann sperren Sie diese Person. Auch das ist nicht idiotensicher, aber ich denke, es ist viel unangenehmer, gesperrt zu werden und den Benutzer/IP/beides wechseln zu müssen, als "fluffy white bunny" statt "pussy" zu schreiben. Zum Teil wissen die Benutzer nicht, WELCHE Wörter oder Ausdrücke sie nicht verwenden dürfen, so dass sie nicht so einfach verschiedene böse Wörter erraten können, da sie gesperrt werden.
2 Stimmen
Schimpfwortfilter sind eine schlechte Idee. Es ist sehr schwer zu unterscheiden zwischen jemandem, der versucht, das System auszutricksen ("Fudge you!"), und jemandem, der legitim über etwas völlig Angemessenes spricht ("I like chocolate fudge.").
0 Stimmen
pip install -U expletives
?0 Stimmen
Ich schlage vor, nicht zum Totalitarismus beizutragen und sich einen richtigen Job zu suchen.