Eingabe nach ISO-8859-15 Filtern.

  • Hallo zusammen,

    in meinem PHP-Script möchte ich Benutzereingaben die VIA Post kommen mit einem Regex Filtern.
    Und zwar sollen nur Zeichen von 20-FE und A1-FF möglich sein.
    (Code-Tabelle: http://de.wikipedia.org/wiki/ISO_8859-15#Tabelle)

    Nun kann man diese Prüfung nach dem Hex-Wert ja z.B. so lösen (Beispielhaft):

    Code
    preg_match('/[\x00-\x09\x0b-\x1f\x7f-\x9f]/')


    Ich frage mich nur wie ich beeinflussen kann das die Code-Tabelle der von ISO-8859-15 verwendet wird, diese unterscheidet sich ja in den "Nicht ASCII"-Bereichen von z.B. ISO-8859-1 und somit repräsentieren die HEX-Werte auch andere Zeichen.


    Bitte keine UTF-8 Diskussion starten, mir geht es einfach nur um die Frage.


    Freue mich über eure Antworten,

    Grüße!

  • Dein Beispiel ist unvollständig, siehe: http://de.php.net/preg_match

    Wenn Du iso-15-Zeichen suchen willst, dann genügt es wenn der zu durchsuchende String diesen Zeichensatz verwendet und Du in den Suchparametern auch diese Zeichen angibst - aber nicht so kodiert wie in deinem Beispiel. Alternativ könntest Du auch den zu durchsuchenden String in Hex-Codes umwandeln und dann diesen mit deinen kodierten Zeichen durchsuchen.

  • Hallo threadi,

    ja das Beispiel sollte nur den Regulären Ausdruck zeigen, aber hätte ich natürlich besser vollständig hingeschrieben um Verwirrung vorzubeugen ;)

    "Wenn der zu durchsuchende String diesen Zeichensatz verwendet"
    Aber wie kann ich das sicherstellen, im Grunde könnte ja jemand das Formular mit einem ganz anderen Zeichensatz abschicken, als angeben. (Manipulieren.)
    Gut bei der Variante, wo ich einfach alle "gültigen" ISO-15 Zeichen in meinen Regulärenausdruck schreibe ich die Sache natürlich einfach, alles was da nicht drin vorkommt,
    wird ignoriert.

    Aber ich dachte vlt. ein eine Möglichkeit mit der Code-Tabelle zu arbeiten. Aber den String kann ich ja auch nicht einfach in Hex-Codes umwandeln.
    Es gibt ja nur die "ord"-Methode wo ich ein ASCII-Wert von einem Zeicehn zurück kriege, aber ISO-15 ist ja ein 8-BIt Zeichensatz und hat noch
    ein paar mehr Zeichen als der normale ASCII-Stamm.

    Es scheint mir so, als sei die direkte Angabe der gültigen Zeichen, die einzige Möglichkeit, ist dem wirklich so?

  • Und was hast du davon, Leute zu vergraulen, die andere Zeichen benutzen? Ich würde mal sagen ziemlich wenig…
    Ich verwende dauernd Nicht-ISO-8859-1-Unicode-Zeichen und wäre recht verärgert, wenn das dan einfach nicht funktioniert.

  • Das Problem ist, dass die Daten über eine Schnittstelle (die ich nicht beeinflussen kann) in ein zweites System geladen werden. Und hier hakt es manchmal, weil die Schnittstelle mit bestimmten Zeichen nicht klar kommt.

    Da ich nicht weiß welche Zeichen das sind, bzw. es ja tausende sein können ist eine Whitelist meist einfacher zu erstellen bzw. wurde mir vom dies vom Schnittstellenersteller quasi "vorgeschrieben" doch bitte nur ISO-Zeichen zuzulassen.

    Aber die nicht ISO-15 Zeichen kommen ja als HTML-Entity an, diese müsste ich also erstmal wieder zurück wandeln in das Ursprungszeichen um es mit dem Regex abzugleichen.

  • Was? Nein, die kommen nicht als HTML-Entity an. Wäre auch ziemlich unsinnig, da ja von HTTP festgelegt wird, wie die Formular-Eingaben verschickt werden, und das ist ja unabhängig von HTML. Das wird mit Anführungszeichen geschickt, wenn ich das richtig sehe, aber davon bekommst du mit PHP auch gar nichts mit. An Stelle der Filterung die speziellen Zeichen mit HTML-Entities zu ersetzen wäre allerdings wohl sinnvoller.

  • Hier stimme ich The User zu. Einfach durch htmlentities oder urlEncode jagen, das ergebnis sollte den anforderungen entsprechen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hallo zusammen,

    ich hatte bei meiner ISO-15 Seite mal ein Zeichen eines anderen ISO-Zeichensatzes (welcher nicht in ISO-15 enthalten ist) reinkopiert und abgeschickt. Dieser kam auf der nächsten Seite an, aber direkt schon als Entity (im Quellcode sichtbar), ohne das ich was gemacht habe.

    Wie sollte das Zeichen sonst auch verarbeitet werden, wenn man nach Bit/HEx-Code geht muss man sich ja trotzdem für eine Codetabelle bei der Interpretation entscheiden und da kann ein Zeichen unterschiedlich sein.


    Das Problem an der Entity Geschichte ist ja, dass die Schnittstelle bzw. in letzter Konsequenz die Warenwirtschaft mit den Zeichen nicht viel anfangen kann. Zudem können so immer noch Zeichen in die DB gelangen, die kein entsprechendes Entity besitzen.