Nicole: strpos Badword Liste-kein F*CK ?

Hallo erst mal;-)
Seltsames ist mir heute wiederfahren.
Habe eine Badwordliste mit strpos()gebastelt und
die funktioniert auch tadelos, aber...

Auf 2 Worte reagiert strpos nicht:
fick
fuck

Das ist echt kein Witz.
Habe ich eine verseuchte PHP version,
oder habt Ihr das gleiche Ergebniss ?

$checkstr="";
$badwords=array("dreck","mist",fuck","fick","porn");
foreach($badwords as $bad)
{if(substr_count($checkstr,$bad)){$error.="<br>$bad";}}

Gruss Nikki

  1. War das falsche script vorhin.
    Hier hatte ich schon strpos durch substr_count() ersetzt.
    Aber das gehört ja nicht zu meiner Frage.

    {if(substr_count($checkstr,$bad)){$error.="<br>$bad";}}

    Richtig ist natürlich:

    $checkstr="";
    $badwords=array("dreck","mist",fuck","fick","porn");
    foreach($badwords as $bad)
    {if(strpos($checkstr,$bad)){$error.="<br>$bad";}}

    Gruss Nikki

    1. Hi Nikki,

      solche Skripte nützen zwar gar nix und ich weiss auch nicht,
      warum man sowas überhaupt einbaut, aber na gut....
      hier fehlen ein Entenfüsschen ;o)

      $badwords=array("dreck","mist",fuck","fick","porn");

      ^

      Gruss
      annA

      1. solche Skripte nützen zwar gar nix und ich weiss auch nicht,

        Hallo Annna
        das siehst du falsch, denn es sind nicht nur Worte die man damit
        ausblenden kann, sondern man kann damit auch eine vefeinerte
        strip_tags version erzielen. Thema Sicherheit.

        hier fehlen ein Entenfüsschen ;o)

        $badwords=array("dreck","mist",fuck","fick","porn");

        Ja stimmt, aber nur hier im Forum(war halt spät ;-).
        Im Original ändert das leider nichts:
        $badwords=array("dreck","mist",fuck","fick","porn");

        Gruss Nikki

        1. Nikki,

          da fehlten doch schon wieder die "...

          das Skript funktioniert bei mir, kopier das doch mal genau so

          <?php
          $checkstr= "Hallo dreck was für ein fuckmist";
          $badwords=array("dreck","mist","fuck","fick","porn");
          foreach($badwords as $bad)
          {
            if(strpos($checkstr,$bad)){
              $error.="$bad<br>";}
          }
          echo "$error";
          ?>

          Gruss
          annA

          PS: Um Tags in Postings zuvermeiden, ist eine solche Funktion
          natürlich hilfreich, bloss eben nicht um zu verhindern, dass jemand
          so ein xSxCxHxExIxSxS in ein Forum schreibt.

          1. das Skript funktioniert bei mir, kopier das doch mal genau so
            $checkstr= "Hallo dreck was für ein fuckmist";

            Hallo Anna,
            tja seltsam das.

            Jetzt habe ich den Fehler gefunden:
            Das böse Wort darf nicht am Anfang stehen und somit
            ist strpos() eine böse Falle weil viele diese Funktion so nutzen.

            Probier das mal ;-)
            <?php
            //Badword
            $checkstr= "fuck this bad strposfunc"; // fuck zuerst
            $badwords=array("<?","<html>","<body","dreck","mist","fuck","fick","porn");
            foreach($badwords as $bad)
            {
              if(strpos($checkstr,$bad)){
                $error.="$bad<br>";}
            }
            echo "$error";
            ?>

            Vielen Dank
            Nikki

            ps. Deshalb nutze ich substr_count($checkstr,$bad)
            ...oder kennst du eine andere Alternative?
            Ich will keine Funk. wie strstr oder so nehmen
            weil dann der ganze str als Rückgabewert kommt,
            somit langsamer.

            1. Moin Moin !

              Jetzt habe ich den Fehler gefunden:
              Das böse Wort darf nicht am Anfang stehen und somit
              ist strpos() eine böse Falle weil viele diese Funktion so nutzen.
                if(strpos($checkstr,$bad)){

              Waaaaah! Mädels! Das kann doch nicht wahr sein!

              Was liefert strpos zurück? Steht alles unter http://www.php.net/manual/de/function.strpos.php! Und da steht auch, wie man das Ergebnis RICHTIG abfragt.

              <ZITAT>

              Anmerkung: Die Meldungen "Zeichen bei Position 0 gefunden [...]" und "Zeichen nicht gefunden [...]" werden oft falsch ausgelegt. Hier die Unterscheidung:

              // in PHP 4.0b3 und danach:
              $pos = strpos ($mystring, "b");
              if ($pos === false) { // Achtung: 3 Gleichheits-Zeichen
                  // nicht gefunden...
              }

              // in Versionen vor 4.0b3:
              $pos = strpos ($mystring, "b");
              if (is_string ($pos) && !$pos) {
                  // nicht gefunden...
              }

              </ZITAT>

              Wenn der gesuchte String am Anfang, also ab dem Zeichen mit dem Index 0 steht, liefert strpos 0 zurück. Wenn der gesuchte String gar nicht da ist, liefert strpos FALSE. if(0) und if(FALSE) sind für PHP nun einmal identisch.

              Alexander

              PS: Ich habe keine Ahnung von PHP. Aber ich kann http://www.php.net/ lesen. Und bei dieser strpos-Konstruktion wird mir ÜBEL!

              --
              Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
              Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
              1. Hallo Alexander,

                Wenn der gesuchte String am Anfang, also ab dem Zeichen mit dem
                Index 0 steht, liefert strpos 0 zurück.

                Wie ich schon sagte ist das Problem schon bekannt.
                Nicht desto trotz nutzen viele die Funktion aber so
                ohne die Problematik zu kennen, also wird dieser Eintrag dem
                einen oder anderen helfen.

                PS: Ich habe keine Ahnung von PHP. Aber ich kann http://www.php.net/ lesen. Und bei dieser strpos-Konstruktion wird mir ÜBEL!

                Dann kotz dich mal aus,
                für jedes Problem gibts im Netz ein Antwort,
                also braucht man deiner Meinung nach kein Forum.
                Sehr anmassend von dir, ebenso deine Ausdrucksweise.

                NIKKI

                1. Liebe Nicole,

                  Wie ich schon sagte ist das Problem schon bekannt.

                  Da besteht kein Problem. Die Funktion arbeitet schon seit einigen PHP-Versionen genauso, wie sie dokumentiert ist.

                  Nicht desto trotz nutzen viele die Funktion aber so
                  ohne die Problematik zu kennen,

                  Was bei dem Entwickeln von Software sträflicher Leichtsinn ist.

                  also wird dieser Eintrag dem einen oder anderen helfen.

                  Bestimmt. Nur suchen die wenigsten Leute, die schon im Handbuch nicht nachschauen, auch noch hier im Archiv, also wird Deinen Eintrag niemand von der Zielgruppe lesen.

                  für jedes Problem gibts im Netz ein Antwort,

                  Stimmt, für fast jedes.

                  also braucht man deiner Meinung nach kein Forum.

                  Hat er nicht gesagt und auch nicht gemeint. Nur von einem Problem in der Funktion zu sprechen, einen Ausweg zu suchen aber nicht im Handbuch nachschlagen, da kann man im Forum nicht so wirklich helfen. ;)

                  Sehr anmassend von dir, ebenso deine Ausdrucksweise.

                  Auch wenn ich Alexanders Ausdrucksweise in dem Fall nicht wirklich gut gewählt finde. Anmassend ist es mit Sicherheit nicht. Denn schlicht und ergreifend habt Ihr beide etwas falsch gemacht, was nicht nur zeigt, dass Ihr nicht wisst, welches Ergebnis die Funktion gibt, sondern eben auch, dass Ihr trotz Problems nicht nachgeschlagen habt. ;)

                  Nichts für ungut.

                  Gruss, Thoralf

                  --
                  Sic Luceat Lux!