Najprostszy sposób (ale niekoniecznie wydajny), jaki mi przyszedł do głowy - bez żadnych regexów:
$forbiddenWords = ['brzydkie', 'slowa'];
$text = 'losowy tekst zawierający brzydkie slowa';
foreach ($forbiddenWords as $word) {
if (strpos($text, $word)) {
$text = str_replace($word, '***', $text);
}
}
echo $text;
// wyświetli 'losowy tekst zawierający *** ***'
Jeśli chcesz przechowywać zakazane słowa w oddzielnym pliku txt, to możesz użyć funkcji file, która pobierze zawartość pliku do tablicy (wtedy każde słowo musi być od nowej linii, aby funkcja potraktowała je jako oddzielne elementy tablicy).