Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit badword filter

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit badword filter

    Hallo,

    habe ein badword filter im Netz gefunden und an meine Bedürfnisse anpassen wollen leider ist nicht so einfach
    Also es ist der ganze Code mit Funktion selbst und ganz unten der Aufruf der Funktion. Und es gibt noch ein textfile(utf-8 kodiert) wo alle schlimmen wörter drinn stehen und zwar zeilenweise. Was noch zu beachten gibt, dass ich die "schlimmen Wörter" nicht mit sternchen ersetzen will, sondern nur prüfe und gleich beim ersten fund abbreche b.z.w negative Meldung ausgeben will. Wenn der ganzer badwords.txt durch ist und nichts gefunden wird dann soll positive meldung folgen. Es hängt vor allem an der foreach-Schleife da geht was schief, starre das ganze schon seit 2 Stunden an und verstehe nicht woran es lieg. Also bitte bitte... hilft mir
    PHP-Code:
    <?php

    function filterBadWords($str,$badWordsFile) {
      if(!
    is_file($badWordsFile)) {
        echo 
    "ERROR: file missing: ".$badWordsFile;
        exit;
      }
      else {
        
    $badWordsFH fopen($badWordsFile,"r");
        
    $badWordsArray explode("\n"fread($badWordsFHfilesize($badWordsFile)));
        
    fclose($badWordsFH);
      }
      foreach (
    $badWordsArray as $badWord) {
        if(
    stripos(utf8_encode($str), $badWord)!==false
    {
        return 
    false;
    }else {
        return 
    true;
    }
    }
    }
    ?>
    <?php
    //$message = 'Ein Penner'; // jeweils zum testen
    $message 'Ein guter Mann'//jeweils zum testen

    // Function Call/Usage
    if (filterBadWords($message,"badwords.txt") == 0) {
      echo 
    'Message enthält keine badwords aus badwords.txt';
    }
    else
    {
      echo 
    'Message enthält mindestens 1 badword';
    }
    ?>


  • #2
    da geht was schief
    Das ist keine sinnvolle Problembeschreibung.

    Ich denke, dass du
    Code:
    return true;
    nur zurückgegeben willst, wenn wirklich alle Wörter bereits überprüft worden sind!? Das heißt, dass deine Funktion so ausssehen sollte:

    PHP-Code:
    function filterBadWords($str,$badWordsFile) {
      if(!
    is_file($badWordsFile)) {
        echo 
    "ERROR: file missing: ".$badWordsFile;
        exit;
      }
      else {
        
    $badWordsFH fopen($badWordsFile,"r");
        
    $badWordsArray explode("\n"fread($badWordsFHfilesize($badWordsFile)));
        
    fclose($badWordsFH);
      }

      foreach (
    $badWordsArray as $badWord) {
        if(
    stripos(utf8_encode($str), $badWord)!==false) {
          return 
    false;    
        }
      }
      return 
    true;

    http://hallophp.de

    Kommentar


    • #3
      PHP-Code:
      function filterBadWords($str,$badWordsFile) {
        if(!
      is_file($badWordsFile)) {
          echo 
      "ERROR: file missing: ".$badWordsFile;
          exit;
        }
        
      $badWords file($badWordsFile);
        
      $badWords array_map('preg_quote'$badWords);
        
      $badWords implode('|'$badWords);

        return !
      preg_match('°' $badWords '°'$str);

      Ungetestet aber so ist das ganze wahrscheinlich performanter.

      Kommentar


      • #4
        @Draco: Da wirst Du sicher Probleme mit den Umbrüchen bekommen, die Ausdrucksbegrenzer gehören zudem immer mit ins Quoting. Zudem fehlt der /i Parameter.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar

        Lädt...
        X