เมื่อคุณมีตาราง MYSQL ที่ดีของคำที่ไม่ดีบางคำที่คุณต้องการกรอง (ฉันเริ่มด้วยลิงก์ในกระทู้นี้) คุณสามารถทำสิ่งนี้ได้:
$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 />";
ฉันแน่ใจว่ามีวิธีที่มีประสิทธิภาพมากขึ้นในการทำสิ่งทดแทนเหล่านั้นทั้งหมด แต่ฉันไม่ฉลาดพอที่จะเข้าใจได้ (และดูเหมือนว่าจะทำงานได้ดี
ฉันเชื่อว่าคุณควรทำผิดด้านการอนุญาตให้ผู้ใช้ลงทะเบียนและใช้คนในการกรองและเพิ่มลงในตารางดูหมิ่นของคุณตามที่ต้องการ แม้ว่าทุกอย่างขึ้นอยู่กับค่าใช้จ่ายของคำบวกที่ผิด (โอเคคำที่มีการติดธงว่าไม่ดี) กับคำที่เป็นเท็จ (คำที่ไม่ดีจะได้รับผ่าน) ในที่สุดควรควบคุมว่าคุณจะก้าวร้าวหรืออนุรักษ์นิยมอย่างไรในกลยุทธ์การกรองของคุณ
ฉันจะระวังให้มากถ้าคุณต้องการใช้สัญลักษณ์แทนเนื่องจากบางครั้งพวกเขาสามารถทำงานได้มากกว่าที่คุณตั้งใจ