Hallo,
$x = ord ( $string ); //gibt den ASCII Wert des Zeichens aus
... du betrachtest in jedem der 6 Durchläufe nur das erste Zeichen des Strings.
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).
ja, die Ausführungen sind richtig und verständlich (finde ich), aber Alexander verstümmelt seine Eingabedaten ja gleich zu Anfang mit htmlentities(). Und dann hat er für ein "ä" eben nicht mehr C3,A4 oder E4, sondern 26,61,75,6D,6C,3B (entspricht "ä").
Vorausgesetzt, das "ä" kommt in einer 1-Byte-Codierung wie etwa ISO-8859-x an. Falls es UTF-8-codiert ankommt, würde es durch htmlentities() zu "ä" gewandelt, also 26,41,74,69,6C,64,65,3B,26,63,75,72,72,65,6E,3B.
Und das ist es, was ich nicht verstehe: Er macht sich einen Riesenaufwand, um den String so umzucodieren, dass er nur noch ASCII-Zeichen enthält, dabei ist diese Forderung hier an dieser Stelle bereits erfüllt (unter Umständen mit einer Verfälschung der Information: ä -> ä).
[1] Um aus einer solchen Liste (Vector) die Einzelwerte zu kriegen, dazu gibt es Bit-Operatoren. In Perl gibt es die Funktion unpack().
Da reicht schon der Zugriff auf die einzelnen Zeichen im String.
So long,
Martin
F: Was sagt die kleine Kerze zur großen Kerze?
A: Ich gehe heute nacht aus!