Ralf: Problem bei einem Wortfilter Script

Hiho :)

ich programmiere zur Zeit an einem Wortfilter-Script das Schimpfworte aus einer txt ausliest und dann mit Sternchen zensiert per str_replace.

Dabei werden die Buchstaben der einzelnen Schimpfworte der TXT gezählt und dann per for-schleife so lange Sternchen hingeschrieben bis die entsprechende Anzahl an Buchstaben erreicht wurde.

Nun wollte ich es noch ein bisschen ausreifen, dass man den ersten Buchstaben des Wortes sieht und nur die restlichen Buchstaben durch Sternchen ersetzt werden

meine Probleme sind nun aber noch:

in meiner TXT steht z.b: Idiot

-wenn nun aber jemand idiot eingibt wird das Wort nicht mehr verschlüsselt wegen dem großbuchstaben.

ich möchte aber nicht diese einzelnen Schimpfworte 5 mal in die TXT schreiben müssen:

Idiot
idiot
IDIOT
iDiOt
... usw.

was würded ihr machen um das problem aller groß-kleinschreibweisen abzudecken?

Später taucht dann nämlich noch das problem mit str_replace auf, weil ich in einem Array alle verschlüsselten worte speichere..

so sieht dann in etwa mein str_replace aus:

beispiel 2er arrays die generiert werden:

$LISTE_ALLER_WORTE_IM_TXT_FILE = array("Idiot", "Saftsack", ..usw.)

$GENERIERTE_WORTE_MIT_STERNCHEN = array("I****", "S*******", ..usw.)

str_replace("".LISTE_ALLER_WORTE_IM_TXT_FILE[$i]."", $GENERIERTE_WORTE_MIT_STERNCHEN[$i], $text);

nun sieht es nämlich so aus das der erste enthüllte Buchstabe eben immer der 1. Buchstabe aus den Worten des txt files stammt.

Ums mal bei diesem Problem auf den Punkt zu bringen: ich komm einfach nicht drauf wie ich nun den ersten Buchstaben klein oder Groß hinschreiben lasse wenn eben ein User den buchstaben auch klein bzw. groß hinschreibt!

Beispiel:

jemand postet(groß - kleinschreibung beachten!): saftsackidiot

würde das Resultat im bezug auf das obrige beispiel so aussehen wenn ich das 1. Problem gelöst habe:

S*******I****

naja ich bin mir fast sicher ich habs total schlecht erklärt und verlange vermutlich zu viel von euch, nur bin ich bereits am verzweifeln mach daran schon 3 stunden rum und komme nicht weiter.
Möglicherweise ist es nur ein kleines Problem, vielleicht aber  auch nicht!

Wenn also jemand Lust hat zu knobel (oder das mit links zu lösen ;) würd ich mich freuen!

Gruß Ralf!

  1. hey,

    ich hab Deinen Text nicht gelesen, aber ich denke folgendes müßte reichen:
    in Deinem Muster, welches einem schimpfwort entspricht mußt Du eigentlich nur /.../i schreiben. somit wird die unterscheidung zw. GROß- und klein-schreibung unterdrückt...

    MfG,
       kühni.

    1. hmm .. heisst das wenn ich ein Backslash vor die Worte setz kümmerts ihn nicht ob irgendwo in dem wort groß oder kleinbuchstaben vorkommen? wenn ja wie könnte ich den backslash dann in das array integrieren! weil das array wird erst mit dem auslesen des TXT-Files generiert :-/

      Hier mal mein script:

      function wordfilter($text)
      {
      global $badfile;
      /**** Reading out data from the txt-File and put them into an Array **************/
      $badwords = array();

      $openfile = fopen($badfile, "rb");
      $getcontent = file($badfile);

      for($i = 0; $i < count($getcontent); $i++)
          {
        $trimmedWord = trim($getcontent[$i]);
        $trimmedWord = strtolower($trimmedWord);
        array_push($badwords, $trimmedWord);
        }
      fclose($openfile);
      /*********************************************************************************/

      /**** Censoring the Words *****************************************************/
      $censoredWords = array();

      for($i = 0; $i < count($badwords); $i++)
          {
        $countChars = strlen($badwords[$i]);
        for($j = 0; $j < $countChars; $j++)
            {
          if($j == 0)
             {
            $firstLetter = substr($badwords[$i],0,1);
            $censoring[$i] .= $firstLetter;
            }
          else
             {
            $censoring[$i] .= "*";
            }
          }
        array_push($censoredWords, $censoring[$i]);
        $text = str_replace("".$badwords[$i]."", $censoredWords[$i], $text);
        }
      /******************************************************************************/
      return $text;
      }
      $text = wordfilter($text);
      echo $text;

      wie man sieht habe i ch überall nur arrays die von einander abhängen! wirkliche daten habe ich in dem Gesamten Quelltext nicht, die werden nur importiert...