hotti: Binärcodeausgabe funktioniert nicht bei Sonderzeichen

Beitrag lesen

hi,

$x = ord ( $string ); //gibt den ASCII Wert des Zeichens aus

... du betrachtest in jedem der 6 Durchläufe nur das erste Zeichen des Strings.

Genau das macht ord(). Es nimmt aus einem String stets nur das erste Zeichen. Wenn ein 'ä' am Server ankommt, egal ob mit GET oder POST, ist das jedoch eine Liste von Integer-Werten [siehe 1]. Jetzt kommts drauf an, wie das Formular codiert ist, bzw. war in dem Moment wo ein Submit erfolgte. War es utf-8, kommt ein 'ä als Liste C3.A4 am Server an. ord() nimmt daraus den ersten Wert, das ist C3 und ord() zeigt Dir eine 195 (dezimal).

War das Fom in ISO-8859-1, ist die Liste kürzer, ein 'ä' kommt da als E4 an, was bei ISO-8859-1 dem Dezimalwert von 228 entspricht [siehe 2].

Dies nur mal so als Ergänzung, es ist also durchaus wichtig, zu wissen, wie die Datenquelle, hier der UserAgent, bspw. ein Formular codiert ist. Beachtenswert ist evnt. auch der Umstand, dass ein Besucher die Codierung eines Formulars im Browser vor dem Submit anders einstellen könnte [siehe 3].

[1] Um aus einer solchen Liste (Vector) die Einzelwerte zu kriegen, dazu gibt es Bit-Operatoren. In Perl gibt es die Funktion unpack().

[2] Da es mehrere ISO-Tabellen gibt, sind diese Integer-Werte unterschiedlich.

[3] Er kann das nicht, bzw. was Besucher im Browser einstellt, ist für ein XHR-Objekt unerheblich. D.h., bei einem AJAX Request ist die Vector-Codierung immer gleich und entspricht der Codierung eines UTF-8-Formulars.

In der Hoffnung, dass nun alle Klarheiten beseitigt sind,
Horst Haselhuhn

--
Ich bin zwar ein altes Schiff, aber ich boote noch ;-)