Roger: badwords ersetzen

moin!

ich möchte "böse wörter" aus meiner textvariable herausfiltern/ersetzten. wie mache ich das am effektivsten/resourcenschonensten?

$badwords = array('badword1', 'badword2', ...);
$text = "Hier steht jede Menge Text...";

gruß.
roger.

--
Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  1. Hallo!

    ich möchte "böse wörter" aus meiner textvariable herausfiltern/ersetzten. wie mache ich das am effektivsten/resourcenschonensten?

    $badwords = array('badword1', 'badword2', ...);
    $text = "Hier steht jede Menge Text...";

    http://at.php.net/str_replace arbeitet auch mit Arrays! Der letzte Satz der Beschreibung trifft auf Dein Beispiel zu.

    Beste Grüße
    Viennamade

    1. moin!

      prima! danke. hat mir schon sehr weitergeholfen. ich wusste nicht, dass die funktion auch arrays nimmt. n1!
      allerdings wollte ich gern noch eine case-sensitive unterscheidung machen. wenn jemand wie ich alles klein schreibt und das badword nur als großgeschriebenes existiert, wirds schon komplizierter.

      in php5 gibt es ja schon ein str_ireplace() aber in php4 noch nicht... :(

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
      1. moin!

        so. ich habs hinbekommen, dass mir eine liste von wörtern ersetzt wird. allerdings wird die schreibweise des wortes in $badwords aufgezwungen.
        angenommen, in $badtext würde "Scheiße" klein geschrieben, so wird es im endeffekt trotzdem groß ausgegeben. zugegeben, ich hab die function str_ireplace nicht richtig verstanden. kann man das nicht noch ein wenig anpassen? ansonsten macht das script schon das was ich wollte:
        "Ich will diese S****** hier nicht!"

        <?

        $badwords = array("fuck", "Scheiße", "Arsch");
        $badtext = "Ich will diese Scheiße hier nicht!";

        function str_ireplace($needle,$rep,$haystack,$pos=0)
        {
         $b=explode(strtolower($needle),strtolower($haystack));
         foreach($b AS $bK => $bV)
         {
          $b[$bK]=substr($haystack,$pos,strlen($bV));
          $pos+=strlen($bV)+strlen($needle);
         }
         return implode($rep,$b);
        }

        foreach($badwords as $word)
        {
         $repl_word = substr($word, 0, 1).str_repeat("*", strlen($word)-1);
         $badtext = str_ireplace($word, $repl_word, $badtext);
        }
        echo $badtext;

        ?>

        gruß.
        roger.

        --
        Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  2. Hallo Roger,

    ich möchte "böse wörter" aus meiner textvariable herausfiltern/ersetzten.

    spar dir die Mühe - es wird immer Varianten geben die dein Filter nicht findet (derjenige der das "böse Wort" postet muss ja nur irgendwelche Zeichen (z.B. »*« oder » «) einbauen oder Zeichen durch optisch ähnliche (z.B. »l« -> »|«) ersetzen).

    Grüße aus Nürnberg
    Tobias

    1. moin!

      klar, das kann man nie ausschließen. man kann aber versuchen, diese wörter zu zensieren - zumindest für den leser. es muss ja keine meldung kommen ala: "ihr wort ist verboten", bei einem eintrag. es genügt mir, wenn dann im text ein ***** steht.

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de