Limpiar palabras groseras con expresiones regulares en php

Esta expresión regular filtra las palabras groseras que algunos de nuestros usuarios podrían poner.

function deswear($string){

function prep_regexp_array(&$item){
$item = «#$item#i»;
}

function stars($matches){
return substr($matches [0] , 0, 1).str_repeat(«*», strlen($matches [0] )-1);
}

$swears = array(«idiota», «invecil»);
array_walk($swears, «prep_regexp_array»);
return preg_replace_callback($swears, «stars», $string);
}
//ejm:
echo deswear(«marcianito es un idiota»);