Richard Davey wrote:
> Hi all,
>
> Just wanting to pick your collective brains on this one:
>
> How do you go about implementing a swear / bad-word filter in PHP?
>
> Reasons for needing one aside, I'm just wondering if you favour a
> regexp, a substr_count, or what? Do you like to *** out the bad words,
> or just error back to the user? (I guess that is application
> specific).
>
> There are always ways to circumvent them, but I'm still curious to
> know how you prefer to handle it.
We implemented a simple key => value array map of rude words to
"sanitised" equivalents:
e.g. breast => sandwich, felch => retrieve etc. etc.
Then we used implode to generate a regexp:
$new = ' '.$strBadWordsWrittenByEvilUser.' ';
$gStopRegexp = '('.implode('|',array("\n","\r",'
',',','\.',';',':','-','\!',"'",'"')).')';
foreach ($gNaughtyWords as $naughty=>$nice)
{
$regexp = $gStopRegexp.'('.$naughty.')([s]{0,1})'.$gStopRegexp;
$regexp_rep = '\1'.$nice.'\3\4';
$new = mb_eregi_replace($regexp, $regexp_rep, $new);
}
return trim($new);
The added bonus is that you can flip the key/values in your array and
turn perfectly nice sentences into torrents of abuse ;)
It's not perfect but it works for the most part. And it's fun to think
of all the rude words people might use!!
HTH
Col
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php