User submitted content should always be moderated before its used or outputted on a public website, any system however sophisticated won't be able to understand contexts of words.
Having said that here's a simple way to detect words in a string that can be detected with php and removed or replaced with another word.
First a sample string
$text = 'A sample string that contains words you would rather replace.';
Echo the string and pass each word to a custom function called filter_bad_words by using a callback and replace function built into php: preg_replace_callback
echo preg_replace_callback('!w+!', 'filter_bad_words', $text);
Inside the function create an array or words and their counterpart to replace this would by a blank string or a word, symbol etc.
Each word will be search if there is a match the item in the array will be used and replace the matching word.
function filter_bad_words($matches) {
$bad_words = array(
'replace' => '[censored]',
'words' => '[censored]'
);
$replace = $bad_words[$matches[0]];
return isset($replace) ? $replace : $matches[0];
}
Putting it all together:
<?php
$text = 'A sample string that contains words you would rather replace.';
echo preg_replace_callback('!w+!', 'filter_bad_words', $text);
function filter_bad_words($matches) {
$bad_words = array(
'replace' => '[censored]',
'words' => '[censored]'
);
$replace = $bad_words[$matches[0]];
return isset($replace) ? $replace : $matches[0];
}
?>