Gnom: Zensierung/Wörter zählen

Hallo,

ich habe da eine Idee, ich möchte einen String der z.B für ein Gästebuch oder Kommentarsystem gedacht ist auf gewisse Wörter/Spam untersuchen.
Ich habe ein Array mit solchen ausdrücken wie "Sex" oder sonstiges, nun möchte ich in einer Schleife den String auf diese Wörter mit dem Array vergleichen.
Doch so einfach ist das glaube ich nicht, ich habe den count() des Array genommen und damit die Schleife zum laufen gebracht:

  
  
$i=count($array)  
for($a=0,$a<$i,++$a)  
 {  
   if(strpos($string,$array[a]))  
    {  
      echo gefunden;  
    }  
 }  

Aber die gewissen wörter werden nur so oft gefunden wie die schleife durchläuft. Also wenn es im String 10 wörter gibt die schleife aber nur 3x durchgeht werden auch nur 3 wörter gefunden.
Also ich möchte einfach nur wissen wie oft die wörter gefunden bzw. ersetzt worden sind.
Hat jemand evtl. einen lösungsansatz?

Danke

Gnom(e)

  1. Hallo Gnom.

    Aber die gewissen wörter werden nur so oft gefunden wie die schleife durchläuft. Also wenn es im String 10 wörter gibt die schleife aber nur 3x durchgeht werden auch nur 3 wörter gefunden.
    Also ich möchte einfach nur wissen wie oft die wörter gefunden bzw. ersetzt worden sind.
    Hat jemand evtl. einen lösungsansatz?

    Verwende die Fundposition des jeweiligen Wortes + 1 als Ausgangspunkt (3. Parameter für strpos) für eine erneute Suche.

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hallo Mathias,

      danke, aber es werden trotzdem nicht alle Wörter gefunden.......
      Irgendwas mach ich falsch....

      dir auch einen schönen Freitag!

  2. $i=count($array)
    for($a=0,$a<$i,++$a)
    {
       if(strpos($string,$array[a]))
        {
          echo gefunden;
        }
    }
    [/code]

    fals du nur durch einen array loopen willst, würde ich eher ein foreach konstrukt verwenden.
    das zählen würde ich mit preg_match_all machen
    (http://ch2.php.net/manual/de/function.preg-match-all.php)

    Das sieht dann ungefähr so aus:

    $text = Der TExt den du prüfen willst

    foreach($array as $ausdruck)
    {
      preg_match_all("/".$ausdruck."/",$text,$gefunden)
      if(count($gefunden)>0)
      {
        $anzahl_gefunden = count($gefunden[0]);
      }
    }

    die preg_match_all funktion sucht nach allen audrücken, und schreibt diese ins array $gefunden.

    Ersetzen kannst du das ganze dann mit preg replace:
    http://ch2.php.net/manual/de/function.preg-replace.php

    1. Hi,

      ok, das passt schon ganz gut, aber was ist wenn ein wort im String 3x mal vorkommt, dann versagt das ganze doch weil doch 1 wort auch wenn es 3mal vorkommt nur einmal gewertet wird oder nicht?

      1. Hi,

        ok, das passt schon ganz gut, aber was ist wenn ein wort im String 3x mal vorkommt, dann versagt das ganze doch weil doch 1 wort auch wenn es 3mal vorkommt nur einmal gewertet wird oder nicht?

        das ist falsch, darum das "count($gefunden[0])"

        ich hab dir extra die passenden seiten aus dem php manual mitgepostet, also ein klein wenig eigeninitiative kann man schon noch erwarten oder?

  3. Hallo,

    ich habe da eine Idee, ich möchte einen String der z.B für ein Gästebuch oder Kommentarsystem gedacht ist auf gewisse Wörter/Spam untersuchen.

    Soso.

    Ich habe ein Array mit solchen ausdrücken wie "Sex" oder sonstiges, nun möchte ich in einer Schleife den String auf diese Wörter mit dem Array vergleichen.

    Aha.

    if(strpos($string,$array[a]))
        {
          echo gefunden;
        }

    Oh, und ich wollte Dir schon lange ins Gästebuch schreiben, daß ich nach SUSSex fahre (ab und zu klemmt meine Shift-Taste) aber da kommt beim Speichern meines Eintrags immer ein Fehler. ;-)

    Gruß

    Hans

    1. Hi,

      Oh, und ich wollte Dir schon lange ins Gästebuch schreiben, daß ich nach SUSSex fahre (ab und zu klemmt meine Shift-Taste) aber da kommt beim Speichern meines Eintrags immer ein Fehler. ;-)

      da hilft dann auch ein Staatsexamen nicht … ;-)

      Viele Grüße

      Jörg

      1. Hi ;)

        wie schön das man unterscheiden kann ob 'sex' ein teil des wortes ist oder nicht ...

        Schönes WE!

        1. Hi,

          wie schön das man unterscheiden kann ob 'sex' ein teil des wortes ist oder nicht ...

          /s/e/x/
          S E X
          S.E.X

          oder gar

          SSSS  EEEEE  X   X
          S      E       X X
           sss   EEEE     X
              S  E       X X
          SSSS   EEEEE  X   X

          Es gibt (fast?) unendlich viele Wege, solche Wort-Sperren zu umgehen.
          Beliebt sind z.B. ähnlich aussehende Zeichen anderer Schriften (z.B. mit griechischen Zeichen - ein ß durch ein beta ersetzen, ein kleines p durch ein rho, ein kleines t durch ein tau usw. - siehe http://www.unicode.org/charts/PDF/U0370.pdf)
          Auch die kyrillische Schrift hat einiges zu bieten, siehe http://www.unicode.org/charts/PDF/U0400.pdf - besonders passend für diesen Thread ist natürlich die Zeile der Tabelle, vor der die 5 steht ... ;-)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        2. echo $begrüßung;

          wie schön das man unterscheiden kann ob 'sex' ein teil des wortes ist oder nicht ...

          Dann steht ja der Gruppensexorgie nichts mehr im Wege.

          echo "$verabschiedung $name";

      2. da hilft dann auch ein Staatsexamen nicht … ;-)

        hm, verdammt, du warst schneller! ;-)

        1. Hi,

          da hilft dann auch ein Staatsexamen nicht … ;-)

          hm, verdammt, du warst schneller! ;-)

          naja, ist ja auch nicht mehr so ganz neu … ;-)

          Viele Grüße

          Jörg

    2. echo $begrüßung;

      Oh, und ich wollte Dir schon lange ins Gästebuch schreiben, daß ich nach SUSSex fahre (ab und zu klemmt meine Shift-Taste) aber da kommt beim Speichern meines Eintrags immer ein Fehler. ;-)

      Schreib doch einfach SUS5ex oder Suss ex oder ...

      echo "$verabschiedung $name";

    3. if(strpos($string,$array[a]))
          {
            echo gefunden;
          }

      Oh, und ich wollte Dir schon lange ins Gästebuch schreiben, daß ich nach SUSSex fahre (ab und zu klemmt meine Shift-Taste) aber da kommt beim Speichern meines Eintrags immer ein Fehler. ;-)

      hehe ;-) ... Genau wie bei meinen Glückwünschen zum Bestehen des 2. StaatSexamens!

  4. Hi Gnom!

    Wie du sicherlich schon eingesehen hast, bringt es nichts eine Wortsperre einzubauen.
    Wenn die Anzahl der Einträge überschaulich ist, kannst du die Beiträge ja auch von Hand freischalten. Das kostet dich zwar etwas mehr Zeit bzw. Aktivität, ist aber mMn die einzige Lösung.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi,

      ja du hast recht. Mir ging es eigentlich mehr um die Technik aber das klappt ja leider nicht so wirklich wie ich es mir gedacht habe....
      Auch dieses preg_match erkennt zwar das gesuchte wort deutet es aber nur einmal auch wenn es 3 mal im String steht.... oder sehe ich das falsch?