Du könntest deinen String in Kleinbuchstaben umwandeln (strtolower) den Text an allen Leer- und Trennzeichen aufspalten, und die Levenshtein-Distanz der einzelnen Teilstrings zu den Einträgen in deiner Schimpfwortliste berechnen.

Damit würdest du dann auch Dinge wie "s*x" o. ä. filtern können.

Beispiel:

<?php

define('WORDS', 'test lol sex');
define('TEXT', 'Das ist ein sexy T*st für Rechtsexperten und Linksextremisten.');

$words = explode(' ', WORDS);
$text = preg_split('/[\s.,!?]+/', strtolower(TEXT));

print_r($words);
print_r($text);

$found = array();
foreach ($text as $t) {
  if (empty($t)) {
    continue;
  }

  foreach ($words as $w) {
    $dist = levenshtein($t, $w);

    if ($dist <= intval(strlen($t) / 4)) {
      $found[] = $t;
    }

    echo $t . ' + ' . $w . ' = ' . $dist . "\n";
  }

  echo "\n";
}

echo "FOUND:\n";
foreach ($found as $f) {
  echo $f . "\n";
}

Das liefert am Ende folgende Ausgabe:

FOUND:
sexy
t*st

Wie du das jetzt letztendlich genau nutzen willst, bleibt dir überlassen. Ich würde z. B. noch die Prüfung des Werts von "strlen($t) / 4" anpassen. Ich hab mir das jetzt nur nach Gutdünken aus den Fingern gesogen ... aber da gibts bestimmt noch weit optimalere Werte. :)

Naja, egal, ist nur so eine Idee ... :)

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.