Codice PHP:
function censor_words($str, $wordlist, $start = 2, $end = -1)
{
foreach ($wordlist as $word)
if (strpos($str, $word) !== false)
$str = str_replace($word, substr($word, 0, $start) . str_repeat('*', strlen(substr($word, $start, $end))) . substr($word, $end), $str);
return $str;
}
Scritta al volo, ma dovrebbe andare come logica e sintassi.
Hai bisogo inoltre di definire un elenco di parole da "censurare" da qualche parte, ad esempio:
Codice PHP:
$wordlist = array('banane', 'pere', 'mele', 'ciliegie');
Per come ho scritto la funzione, l'importante è che questo elenco sia un array.
Infine non ti resta che applicare la funzione alla stringa presa in esame:
Codice PHP:
$string = "Ciao oggi ho 40 banane, 20 mele, 30 pere, 5 ciliegie, 30 cocomeri e non so che altro...";
echo censor_words($string, $wordlist);
Gli ultimi due parametri opzionali servono a definire da che punto a che punto tagliare la stringa.
Con l'esempio di default, ad esempio, la parola 'banane' te la sistema così: 'ba***e'
ma se imposti differentemente il primo parametro opzionale..
Codice PHP:
echo censor_words($string, $wordlist, 1);
la conversione avviene così: 'b****e'.
nota: il primo parametro va a numeri positivi, il secondo a numeri negativi, se vuoi mostrare quindi le ultime due lettere di una parola devi impostare il secondo parametro opzionale a -2.
Enjoy
Edit: si può ottenere il medesimo risultato con un preg_replace_callback, ma ritengo che il metodo illustrato sia più leggero da digerire per il povero interprete.
Per quanto riguarda il replace con una parola invece la logica da seguire è identica a quella della funzione illustrata, basta impostare nel secondo parametro di str_replace la parola che vuoi sostituisca quelle che non ritieni opportune.