Sabine: zensur im gaestebuch

Ich habe ein einfaches Gästebuch mit myqsl-datenbank in php erstellt. Nun möchte ich eine automatische zensur von einzelnen wörtern z.B: sex=s*x
Wie kann ich das am besten umsetzen? Ich würde mich auf Eure Hilfe freuen.
LG! Sabi

  1. hi,

    Nun möchte ich eine automatische zensur von einzelnen wörtern z.B: sex=s*x

    Was'n so schlimm an einer Gas*xplosion ...?

    Wie kann ich das am besten umsetzen?

    Am _Besten_ - m.E. _gar nicht_.
    Es bringt absolut nichts. Lässt du mich böses-Wort-X nicht schreiben, dann benutze ich Synonym Y dafür - oder schreibe statt dem von dir geblockten abc halt a-b-c oder a_b_c.

    Wenn du es trotzdem versuchen willst, dann beschäftige dich mit Stringfunktionen wie str_replace - das mag ja auch Arrays als Parameter nehmen - und ggf. auch noch mit Regulären Ausdrücken.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wenn Du die Zensur doch einsetzen möchtest, dann lass Dir zu den oben genannten Tipps den Hinweis geben, in Deiner Blacklist davor und danach ein Leerzeichen einzufügen bzw. zu suchen, Ignorieren der Groß- und Kleinschreibung nicht vergessen.

      Dann wird das Wort zwar nicht mehr ersetzt wenn es am Anfang des Eintrages oder vor einem Satzzeichen steht, aber Du umgehst die genannten Probleme mit Staats*xamen und Gas*xplosion.

      Zudem bleibt immernoch folgende Möglichkeit: S E X.

      1. Lieber Ben,

        in Deiner Blacklist davor und danach ein Leerzeichen einzufügen bzw. zu suchen, Ignorieren der Groß- und Kleinschreibung nicht vergessen.

        da könnte man doch (bei regulären Ausdrücken) auch auf den String-Anfang und das String-Ende prüfen!

        z.B. so: /[^ ]sex[ $]/i

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. hi,

          in Deiner Blacklist davor und danach ein Leerzeichen einzufügen bzw. zu suchen, Ignorieren der Groß- und Kleinschreibung nicht vergessen.

          da könnte man doch (bei regulären Ausdrücken) auch auf den String-Anfang und das String-Ende prüfen!

          Oder lieber gleich darauf, ob sich vor und hinter dem Suchwort auch Wortgrenzen befinden.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Lieber wahsaga,

            Oder lieber gleich darauf, ob sich vor und hinter dem Suchwort auch Wortgrenzen befinden.

            also so?

            /\bsex\b/i

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. hi,

              Oder lieber gleich darauf, ob sich vor und hinter dem Suchwort auch Wortgrenzen befinden.

              also so?

              /\bsex\b/i

              Ja.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Lieber wahsaga,

                eines ist mir aber immernoch nicht klar: Schließt \b den Anfang (^) und das Ende ($) mit ein?

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.

                1. hi,

                  eines ist mir aber immernoch nicht klar: Schließt \b den Anfang (^) und das Ende ($) mit ein?

                  Worte sind Tische, die in einem Raum stehen; Anfang und Ende des Strings sind die Wände des Raums.
                  Jetzt stelle den ganzen Raum mit Tischen voll, so dass daneben nichts anderes mehr reinpasst.

                  Jetzt befindet sich nicht nur dort eine Tischkante, wo zwei Tische aneinanderstoßen, sondern ziemlich sicher auch dort, wo ein Tisch die Wand berührt :-)

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Moin!

          da könnte man doch (bei regulären Ausdrücken) auch auf den String-Anfang und das String-Ende prüfen!

          Könnte man - aber nicht so:

          z.B. so: /[^ ]sex[ $]/i

          Die erste Klammer steht als Zeichenklasse für "alle Zeichen, nur nicht Leerzeichen". Die zweite Klammer steht für die Klasse "Leerzeichen und Dollar".

          - Sven Rautenberg

          --
          My sssignature, my preciousssss!
          1. Lieber Sven,

            z.B. so: /[^ ]sex[ $]/i
            Die erste Klammer steht als Zeichenklasse für "alle Zeichen, nur nicht Leerzeichen". Die zweite Klammer steht für die Klasse "Leerzeichen und Dollar".

            stimmt. Ich habe zu kurz nachgedacht. Eher so?

            /(^| )sex( |$)/i

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. hi,

              Eher so?

              /(^| )sex( |$)/i

              Nee, auch noch nicht.
              Da benutzt du ^ und $ ja immer noch als einfache "Zeichen".

              Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Lieber wahsaga,

                Da benutzt du ^ und $ ja immer noch als einfache "Zeichen".

                Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.

                das muss ich nochmal studieren. Bisher war ich immer der Meinung, dass ^ bzw. $ nur innerhalb von Character Classes einfache Zeichen, ansonsten aber Metacharacters seien.

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.

                1. Hallo

                  Da benutzt du ^ und $ ja immer noch als einfache "Zeichen".
                  Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.
                  das muss ich nochmal studieren.

                  Lies http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichenketten

                  Bisher war ich immer der Meinung, dass ^ bzw. $ nur innerhalb von Character Classes einfache Zeichen, ansonsten aber Metacharacters seien.

                  Wieviele Anfänge hat ein durchsuchbarer Bereich?
                  Wieviele Enden?
                  Wird es jetzt klarer?

                  Ach ja, dass der Anfang und das Ende des durchsuchbaren Bereiches eine Wortgrenze darstellen, erscheint doch sehr logisch. Was haben Deine Tests ermittelt?

                  Freundliche Grüße

                  Vinzenz

                  1. Lieber Vinzenz,

                    Wieviele Anfänge hat ein durchsuchbarer Bereich?
                    Wieviele Enden?
                    Wird es jetzt klarer?

                    und wie kann ich diese Enden (vorne oder hinten) im Suchmuster referenzieren? Mit den Metacharacters "^" und "$". Oder nicht? Damit muss es doch aber möglich sein, diese Metacharacters auch innerhalb von Alternativen zu verwenden, wie z.B.:

                    /(^|")test("|$)/i
                    soll finden:
                     -> test
                     -> "test
                     -> test"
                     -> "test"

                    Im Nachhinein freue ich mich, dass meine auf dieser Annahme entwickelten Suchmuster so anständig ihren Dienst verrichten, obwohl ich mich da angeblich geirrt haben soll...

                    Ach ja, dass der Anfang und das Ende des durchsuchbaren Bereiches eine Wortgrenze darstellen, erscheint doch sehr logisch.

                    Aus menschlicher Sicht schon. Es klingt sehr sinnvoll, wenn das eine Implementierung auf Programmebene auch genau so vorsieht.

                    Was haben Deine Tests ermittelt?

                    Zu meiner Schande muss ich gestehen, dass ich hier im Forum auf rein hypothetischer Ebene an diese Sache herangegangen bin. In meinen Scripten verfahre ich eher nach dem Trial&Error-Prinzip (natürlich nicht "blind"!), wenn meine Überlegungen noch nicht das gewünschte Ergebnis bringen.

                    Liebe Grüße aus Ellwangen,

                    Felix Riesterer.

                    1. hi,

                      /(^|")test("|$)/i
                      soll finden:
                      -> test
                      -> "test
                      -> test"
                      -> "test"

                      Also möchtest du _eigentlich_ das Wort test suchen, vor und hinter dem optional ein " stehen, also jeweils null oder ein mal auftauchen, darf - und das ganze soll sich aber genau zwischen Stringanfang und -ende befinden, also nichts mehr sonst ...?

                      /^("){0,1}test("){0,1}$/i
                      bzw.
                      /^"?test"?$/i

                      (allgemeine Perl-kompatible Syntax, ich weiß jetzt nicht ganz, ob's in Javascript mit den Quantifiern genauso geht.)

                      gruß,
                      wahsaga

                      --
                      /voodoo.css:
                      #GeorgeWBush { position:absolute; bottom:-6ft; }
                      1. Lieber wahsaga,

                        (allgemeine Perl-kompatible Syntax, ich weiß jetzt nicht ganz, ob's in Javascript mit den Quantifiern genauso geht.)

                        der Thread steht unter PHP, mein Beispiel ist nur der Farbgebung mit  [ code lang=javascript ]  ausgezeichnet. Natürlich sollen die Suchmuster in PHP angewandt werden.

                        Also möchtest du _eigentlich_ das Wort test suchen

                        Es ging mir um das Austesten, ob die Metacharacters "^" und "$" auch innerhalb von geklammerten Ausdrücken ihre Metabedeutung behalten, oder ob sie in Parenthese nur noch einfache Zeichen sind.

                        Es scheint so, als ob sie auch in Parenthese Metacharacter-Eigenschaften behalten.

                        Liebe Grüße aus Ellwangen,

                        Felix Riesterer.

              2. gudn tach wahsaga!

                Eher so?

                /(^| )sex( |$)/i

                Nee, auch noch nicht.
                Da benutzt du ^ und $ ja immer noch als einfache "Zeichen".

                nein, ^ bezeichnet hier den stringanfang. $ bezeichnet hier das stringende.
                die literale '^', '$' wuerden nicht gematcht. (zumindest in php und perl waere das so; ist das in js anders?)

                Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.

                wo steht das?

                prost
                seth

                1. hi,

                  Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.

                  wo steht das?

                  Stand in meinem Kopf, wo ich es jetzt aber wohl besser mal ausstreiche.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Hi,

                    Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.
                    wo steht das?
                    Stand in meinem Kopf, wo ich es jetzt aber wohl besser mal ausstreiche.

                    Das dürfte so in den Manuals derjenigen Regex-Engines stehen, die das so handhaben (ja, sowas gibt's tatsächlich - aber PCRE-Engines wie die bei preg_* in PHP verwendete gehören nicht dazu).

                    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.
                    1. gudn tach!

                      Als Sonderzeichen für Anfang und Ende stehen sie nur genau dann, wenn sie auch genau dort - am Anfang und am Ende des Suchmusters - stehen.
                      wo steht das?
                      Stand in meinem Kopf, wo ich es jetzt aber wohl besser mal ausstreiche.

                      Das dürfte so in den Manuals derjenigen Regex-Engines stehen, die das so handhaben (ja, sowas gibt's tatsächlich [...])

                      dann lass uns doch nicht dumm sterben, sondern nenn mal ein paar. :-)

                      prost
                      seth

                      1. Hi,

                        Das dürfte so in den Manuals derjenigen Regex-Engines stehen, die das so handhaben (ja, sowas gibt's tatsächlich [...])
                        dann lass uns doch nicht dumm sterben, sondern nenn mal ein paar. :-)

                        z.B. die im Editor Textpad integrierte Regex-Engine. Auszug aus der Hilfe:
                        An RE can be restricted to matching strings that begin or end a line or word, as follows:
                        ^ A circumflex as the first character of an RE anchors the expression to the beginning of the line.
                        $ A dollar sign as the last character of an RE anchors the expression to the end of the line.

                        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. Moin!

    Ich habe ein einfaches Gästebuch mit myqsl-datenbank in php erstellt. Nun möchte ich eine automatische zensur von einzelnen wörtern z.B: sex=s*x
    Wie kann ich das am besten umsetzen? Ich würde mich auf Eure Hilfe freuen.

    Du willst Textersetzung. Das eine Wort soll durch ein anderes ersetzt werden.

    Texte sind Strings, also guck mal bei den Stringfunktionen von PHP nach, wo man da was "ersetzen" kann (englisch: replace).

    Und lass dir gesagt sein, dass solche automatische Zensur nichts bringt. Wer böse Worte schreiben will, findet problemlos Möglichkeiten, sie zu schreiben. Und sofern du dir eine rechtliche Besserstellung erhoffst: Wenn man als Mensch erkennen kann, was gemeint ist - auch bei Sternchen im Wort - wird das erkennbare Wort relevant sein. Eine Auto-Unkenntlichmachung hilft in dieser Beziehung also nichts.

    Abgesehen von den "lustigen" Nebenwirkungen, die das haben kann. "Staatsexamen" enthält auch "sex".

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. hi,

      "Staatsexamen" enthält auch "sex".

      Aber häßliche Student(inn)en bekommen ihres manchmal auch ohne, müssen dann aber wirklich gut sein.

      scnr,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Hi,

      Abgesehen von den "lustigen" Nebenwirkungen, die das haben kann. "Staatsexamen" enthält auch "sex".

      Und was danach kommt, ist so sicher wie das ... in der Kirche ;-)

      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.
  3. Liebe Sabine,

    Ich habe ein einfaches Gästebuch mit myqsl-datenbank in php erstellt. Nun möchte ich eine automatische zensur von einzelnen wörtern z.B: sex=s*x

    ich sehe auch nur einen sehr begrenzten Sinn in einem solchen Unterfangen, habe aber trotzdem eine solche Prüfung integriert, da sie ja wenigstens ein Bisschen etwas zur sprachlichen Sauberkeit beiträgt - wenn auch nicht sehr effektiv.

    Ich benutze reguläre Ausdrücke, die zu erlernen sehr sehr sinnvoll ist, da es sich um ein extrem mächtiges Werkzeug handelt. Daher habe ich eine Liste von Ausdrücken erstellt, die ich mittels einer Schleife alle per preg_replace() auf die Usereingaben (auch Namensfeld!) anwende. Sollte dann das Ergebnis von der ursprünglichen Usereingabe abweichen, dann gibt mein GB eine entsprechende Meldung aus und ersetzt das komplette gefundene Muster mit Sternchen. "sex" würde dann zu "***", wobei ausgerechnet "sex" bei mir nicht zensiert wird. Ich suche nach üblichen Schimpfwörtern.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hi!

      reguläre Ausdrücke

      In diesem Fall wäre der Einsatz von str_replace() aber bei weitem sinnvoller.
      Reguläre Ausdrücke sind zwar sehr mächtig, aber dafür auch verdammt langsam.
      Die preg-Funktionen sind zwar um einiges schneller als die ereg-Funktionen, aber trotzdem noch verdammt langsam.
      Immer wenn es möglich ist, sollten man deswegen aus Performancegründen mit String-Funktionen arbeiten.
      Reguläre Ausdrücke würde ich nur dann einsetzen, wenn ich die Aufgabe nicht mehr mit Stringfunktionen bewältigen kann.

      Schöner Gruß,
      rob

      1. Hallo rob,

        Nun möchte ich eine automatische zensur von einzelnen wörtern z.B: sex=s*x

        Die preg-Funktionen sind zwar um einiges schneller als die ereg-Funktionen

        Für Sex gilt: preg gibt’s nur mit ereg.

        Grüße
         Roland

        1. Hallo Roland,

          Für Sex gilt: preg gibt’s nur mit ereg.

          *ROFL!!*

          Gute Nacht auch,
           Martin

          --
          Solange der Nagellack nicht trocken ist,
          ist eine Frau praktisch wehrlos.
            (Burt Reynolds, US-Schauspieler)
  4. Hallo ,

    Wie kann ich das am besten umsetzen? Ich würde mich auf
    Eure Hilfe freuen.

    IMHO am Besten damit, das du dir einen Redaktionelleneingriff in
    die Eintraege vorbehaelst. Oder aber wenn die nicht Veroeffent-
    lichbar sind, gleich loescht. Stichwort: Moderation.

    Ist oft einfacher es so zu machen, als Komplizierte Regulaere
    Ausdruecke oder Wortlisten zu erstellen.

    gruesse aus'm ruhrpott
      jens mueller

    --
    I am a scout. How can I use Perl in my day-to-day scout business? For example, helping little old ladies across the street. - See the perllol man page.
    1. Tach.

      Da hier schon über den Sinn und Unsinn der technischen Möglichkeiten geschrieben wurde...

      Ich störe mich nicht im geringsten an irgendwelchen Kraftausdrücken und kann auch nicht nachvollziehen, was daran so Pfui sein soll. Solange es nicht illegal wird (warum auch immer) darf man bei mir alles so schreiben, wie es einem passt.

      MfG
      ich

      1. gudn tach!

        Da hier schon über den Sinn und Unsinn der technischen Möglichkeiten geschrieben wurde...

        Ich störe mich nicht im geringsten an irgendwelchen Kraftausdrücken und kann auch nicht nachvollziehen, was daran so Pfui sein soll.

        es kommt wie so oft auf den kontext an. ein forum, in welchem man sich _ueber_ schimpfworte unterhaelt, wuerde man wohl nicht mit einer solchen zensur versehen. ;-)

        dagegen moechte man ja z.b. kinder davor bewahren, dass sie unreflektiert in eine extremsprache verfallen, weshalb man z.b. in einem sesamstrassen-forum extrem formulierte bemerkungen ueber samson wohl eher streichen wuerde.

        kraftausdruecke sind in den augen vieler deswegen pfui, weil sie fuer sie eine beleidigende bedeutung haben. und da (leider) nicht jeder ueber solchen beleidigungen steht, werden sie allgemein als pfui angesehen.
        selbst wenn einem (als vermeintlich beleidigten) verbale attacken nicht direkt schaden koennen, weil man ueber ihnen steht, koennen die indirekten folgen dennoch schaedlich sein, weil vielen anderen, die die beleidigung mitbekommen haben, die kritikfaehigkeit fehlt, sie als nicht-ernstzunehmend einzustufen.

        nun gibt es aber nicht nur kraftausdruecke, die beleidigenden charakter haben (sollen), sondern auch z.b. solche, die etwas positiv hervorheben sollen (z.b. "scheisse, wie arschgeil!"). aber trotz der eigentlich positiv gemeinten bedeutung empfinden viele beim lesen/hoeren von sowas scham.

        prost
        seth