Ralf: String erkennenen, egal welche Schreibweise?

HUHUU :)

Ich programmiere eine Wortfilterfunktion die bei Posts in ein Gästebuch, Forum etc. die aus einer Datenbank oder TXT-Datei gespeicherten Schimpfworte mit Sternchen zensiert.

Da ich in der Datenbank nicht 1 Wort in mehreren Schreibweisen eintragen möchste nur um eine hohe Trefferquote bei der Zensur zu erzielen sondern ich es gerne vom Script übernehmen lassen würde stoße ich nun auf ein Problem:

In der Datenbank oder TXT Datei habe ich meinetwegen das Wort "Idiot"
gespeichert (man beachte: großer Anfangsbuchstabe)

mein Script ist nun soweit dass es dieses Wort ersetzt, jedoch nicht mehr wenn es "idiot" geschrieben wird.

nun habe ich eben mehrere kleine Scrits in die Funktion geschrieben, die das Wort auf verschiedene Arten ändert und in einem Array speichert welches aufgerufen wird um zu prüfen ob einige der Schreibweisen zutreffen:

Das Wort wird nun von meinem Script so behandelt bzw. generiert:

1. Idiot -> idiot
2. Idiot -> IDIOT
3. Idiot -> I D I O T

Jetzt habe ich also erreicht, dass das Wort zensiert wird wenn is in Groß- bzw. Kleinbuchstaben geschrieben ist oder wenn man nach jedem Buchstaben ein Leerzeichen setzt.

so nun gibt es aber noch die Möglichkeit das Wort so zu schreiben:

iDiOt...

Gibt es also eine Funktion die erkennt dass es sich um die gleiche Buchstabenfolge handelt egal ob groß oder kleinbuchstaben bestehend?
Ich möchte mein Script so sicher wie möglich machen.
*verzweifel*

Gruß Ralf

  1. iDiOt...

    Gibt es also eine Funktion die erkennt dass es sich um die gleiche Buchstabenfolge handelt egal ob groß oder kleinbuchstaben bestehend?

    Hallo,
    hast du dir schon mal die "strtoupper" Funktion angeschaut? Vielleicht hilft dir das weiter? So würde ich es zumindest angehen.

    Viel Erfolg!
    SvenF2k

  2. Hallo Ralf,

    http://www.php.net/manual/de/ref.strings.php
    http://www.php.net/manual/de/ref.pcre.php

    Aber findige Ixdioten werden immer eine Möglichkeit finden,
    Dein bescheidenes Skript zu umgehen, evt fühlen sie sich
    sogar dazu "angestachtelt" das Skript zu umgehen

    Viele Grüße
    annA

  3. Hi,

    Gibt es also eine Funktion die erkennt dass es sich um die gleiche Buchstabenfolge handelt egal ob groß oder kleinbuchstaben bestehend?
    Ich möchte mein Script so sicher wie möglich machen.
    *verzweifel*

    behandle deinen text mit upper() oder lower() (weiss nicht genau ob der Befehl so heisst, upper kommt in jedem Falle drin vor)
    und suche dann nach IDIOT bzw. idiot usw.
    oder Du suchst mit preg_replace, da gibt es den Modifier i, der das case-sensitiv ausstellt.

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
  4. Hallo Ralf,

    ich kenne mich in PHP noch nicht so gut aus, aber es gibt in 'jeder' Programmiersprache die Möglichkeit einen String z.B. mit (uppercase / lowercase) zu ändern - sprich: das String in Gross-/ Kleinbuchstaben zu ändern. Auf diese Weise bräuchtest du nur noch eine Möglichkeit zu berücksichtigen.

    Aber es gibt mit sicherheit immer ein paar Leute die dann z.B. Idiot so schreiben: Ixdiot oder ähnlich.

    Ausserdem wirst du kaum alle Schimpfwörter berücksichtigen können. Und was ist zum Beispiel gegen: Ich verstehe diese idiotische neue Rechtschreibung nicht. einzuwendne. ;-)

    Kurz Probleme über Probleme. Aber einige kann man ja lösen.

    Grüße - Andre

  5. Hi Ralf
    du solltest zusätzlich auch noch trim zum Filtern benutzen damit sowas:
    i d i o t
    auch rausgefiltert wird.
    allerdings gibt es da noch viel mehr möglichkeiten
    mfg andreas

  6. Moin!

    Ich programmiere eine Wortfilterfunktion die bei Posts in ein Gästebuch, Forum etc. die aus einer Datenbank oder TXT-Datei gespeicherten Schimpfworte mit Sternchen zensiert.

    Ich glaube kaum, dass dein Mechanismus genügend Intelligenz besitzt, um Schimpfworte zu erkennen und zu zensieren.

    Zunächst mal: Warum willst du automatisch zensieren? Das macht die zensierten Beiträge nicht besser, du wirst ohnehin manuell darüber wachen müssen, welche Einträge reinkommen.

    Zweitens wirst du es kaum schaffen, alle möglichen Variationsmöglichkeiten eines Wortes zu erfassen.

    "Idiot" (ein wirklich harmloser Begriff) läßt sich, in groß und klein, sicherlich leicht erkennen und filtern.

    Was aber ist mit "IDI0T"? Die Null sieht doch fast aus wie ein O, fällt also garnicht auf, ist aber für den Computer ein ganz anderes Wort.

    Oder was wäre mit "IDI*T" - also vorweggenommene Zensur. Das Sternchen ist sicherlich auch noch als O wahrnehmbar, aber genau wie bei der Null (bei der man sich ja noch überlegen könnte, sie in ein O umzuwandeln und dann nochmal zu prüfen) ist es ein anderes Wort als "IDIOT".

    Was ist mit "I D I O T"? Die Leerzeichen zwischen den Buchstaben kannst du natürlich wegnehmen, aber woran erkennst du, dass ein Leerzeichen nur zum Auseinanderhalten von bösen Buchstaben gedacht ist, und woran, dass das Leerzeichen wirklich zwei Wörter trennt? Hm, du meinst, Einzelbuchstaben wären verdächtig? Dann schreibe ich "I DI OT" oder "I-DI-OT".

    Oder nehmen wir 1337-spe4k. "||>|0T" ist ja nun wirklich kaum noch erkennbar, aber immer noch ein "Idiot".

    Und was ist, wenn ein Besucher ganz legitim ein freundliches Posting über Dostojewskis "Der Idiot" schreiben will? Das wird dann auch zensiert, und die Diskussion geht dann über "Der ***" - und wenn die Hälfte der Teilnehmer dann daraus "Der 3-Sterne-General" herausliest, ist das irgendwie blöd.

    Solche Wortfilter sind in genau einem Punkt sinnvoll: Wenn es darum geht, das Gästebuch oder Forum vor böswilligen Script-Attacken zu schützen. Wenn HTML nicht als Quelltext ausgegeben wird, sondern 1:1 an den Browser des Lesers gesendet wird, kann man nicht nur mit <b> Fettschrift einstellen, sondern auch Javascript einbauen, welches z.B. massenhaft Popups öffnet oder auf eine Werbeseite weiterleitet. Oder noch ganz andere schlimme Dinge tut, die auf den ersten Blick gar nicht weiter auffallen - beispielsweise könnte man alle (oder einige) Links der Seite verändern und auf einen Server des Angreifers zeigen lassen. Dort ist dann eine grafisch identische Version hinterlegt, und auch ein Login-Feld. Die Login-Daten werden dann natürlich an den falschen Server gesendet.

    Es ist also besser, entweder garkein HTML zuzulassen, oder eben nur bestimmte Sachen, während die anderen Sachen rausgefiltert werden. Und bei Javascript-Code ist es eben nicht egal, ob man "script" oder "scr1pt" schreibt.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|