Mario: Zeichen die nicht zur iso-8859-1 Gruppe gehören filtern

Hallo,

ich möchte gerne ein String so auswerten, das folgendes passiert:

Hallo Autor Dein Text enthält folgende unerlaubte Sonderzeichen: "...."
Bitte korrigiere Deinen Text und sende ihn noch einmal.

Zu den nicht erlaubten Sonderzeichen gehören die Zeichen die nicht in der ISO-8859-1 verwendet werden (Zeichen 0-31 und 127-159). z.B: typographische Anführungsstriche, französische Accents usw.

Ziel der ganzen Aktion soll ein Forum mit Html4.01-Validierung sein. Das Problem ist, daß ich zwar den Code perfekt gestalten kann, wenn jedoch die Autoren Sonderzeichen verwenden dann...

Vielen Dank,

Mario

  1. Hallo,

    Ziel der ganzen Aktion soll ein Forum mit Html4.01-Validierung sein. Das Problem ist, daß ich zwar den Code perfekt gestalten kann, wenn jedoch die Autoren Sonderzeichen verwenden

    Wenn Du PHP verwendest, hast Du doch htmlentities(), da sind Akzente doch kein Problem.

    Dieter

    1. Hallo Dieter

      Genau das wäre auch mein erster Schritt. den Text umwandeln mit htmlentities(). Dann sind alle ISO-Sonderzeichen so umgewandelt, das Sie zu den klassischen Buchstabensatz gehören. Übrig bleibt dann jedoch eine Art Kaffeesatz aus z.B: „ “ ê oder dem trademark symbol usw. die sich nicht umwandeln lassen.

      Wenn ich die Seite via http://validator.w3.org/ überprüfe, bekomme ich die Fehlermeldung: "non SGML character number ###" - You've used an illegal character in your text. HTML uses the standard ISO8859-1 character encoding, and ISO8859-1 leaves undefined 65 character codes (0 to 31 inclusive and 127 to 159 inclusive);

      Im Fall der Anführugnszeichen wäre es Nummer 132 und Nummer 145.

      Vielen Dank.

      1. Hallo,

        Du kannst Dir ja eine eigene Funktion basteln, die alles so ersetzt, wie du es willst.

        Dieter

  2. ich möchte gerne ein String so auswerten, das folgendes passiert:

    Zu den nicht erlaubten Sonderzeichen gehören die Zeichen die nicht in der ISO-8859-1 verwendet werden (Zeichen 0-31 und 127-159). z.B: typographische Anführungsstriche, französische Accents usw.

    preg_match('/[\x00-\x1f\x7f-\x9f]/') sollte Dein Freund sein (\x00 = Hexadezimal für 0, dementsprechend 1f = 31, 7f = 127 und 9f = 159). Die Syntax ist unter "Regular Expression Functions (Perl-Compatible)", "Pattern Syntax", in der PHP-Anleitung erklärt.

    Gruß,
      soenk.e

    1. Zu den nicht erlaubten Sonderzeichen gehören die Zeichen die nicht in der ISO-8859-1 verwendet werden (Zeichen 0-31 und 127-159). z.B: typographische Anführungsstriche, französische Accents usw.

      preg_match('/[\x00-\x1f\x7f-\x9f]/') sollte Dein Freund sein (\x00 = Hexadezimal für 0, dementsprechend 1f = 31, 7f = 127 und 9f = 159).

      Ich weiß nicht so recht, ob er das will, wenn er tatsächlich die besagte Fehlermeldung ausgibt, wenn ein String ein Zeichen zwischen 0 und 31 enthält, sind auch Linefeeds, Carriage Returns, Tabulatoren usw. betroffen. Insofern verstehe ich nicht, was die in [pref:t=66524&m=379764] zitierte Validatorwarnung sagen will, in ISO-8859-1 sind meines Wissens durchaus die bekannten ASCII-Steuerzeichen vorhanden. Mario wird wohl schlecht seinen Autoren untersagen können, Zeilenumbrüche zu verwenden.

      1. preg_match('/[\x00-\x1f\x7f-\x9f]/') sollte Dein Freund sein

        Ich weiß nicht so recht, ob er das will, wenn er tatsächlich die besagte Fehlermeldung ausgibt, wenn ein String ein Zeichen zwischen 0 und 31 enthält, sind auch Linefeeds, Carriage Returns, Tabulatoren usw. betroffen.

        Stimmt. Also '/[\x00-\x09\x0b-\x1f\x7f-\x9f]/' und vorherige Behandlung von Wagenrücklauf und zur Not auch des Tabulators. An den restlichen unteren Steuerzeichen kann auf einer HTML-Seite niemand Interesse haben.

        Gruß,
          soenk.e

        PS: Wobei es natürlich ganz besonders fein wäre, wenn sein Formular kurzerhand Unicode akzeptieren würde, anstatt Windows-Zeichen raus zu filtern.

    2. Vielen vielen Dank an Soenk.e und molily,

      Eurer Tip hilft mir weiter. Ich glaube so wird es funktionieren.

      Ein UniCode-Formular ist wahrlich was feines. Nur wie stelle ich das an. Unicode akzeptieren ist die eine Sache. Aber in meinem Fall handelt es sich um ein Forum mit Teilnehmern, die nicht umbedingt mit Unicode zu tun haben wollen. Die Initiative liegt also bei mir, aus den Eingaben etwas zu machen, was validierbar ist. Meine Idee ist es also gewesen, die Autoren daruaf aufmerksam zu machen, daß sich unverträgliche Sonderzeichen in Ihrer Eingabe befinden.
      Wenn Ihr allerdings eine Idee oder einen Ansatz habt, wie man aus Eingabe einen perfekten UniCode-Text macht. Bin ich sehr interessiert.

      Viele Grüße, Mario