Der Martin: Verrückt mit Umlauten

Beitrag lesen

Hallo,

$mesg .=  sprintf("%-10s %-5s\n", 'Jürgen', 'Wiesbaden');
Der mit dem 'ü' rückt ein Zeichen nach links.
PHPs sprintf() kann wie alle anderen Stringfunktionen (noch) nicht mit Mehr-Byte-Kodierungen umgehen.
Das verwirrt mich umso mehr, nach meiner Logik müsste der Kram dann ja nach rechts rücken und nicht nach links.

deine Logik ist verkehrtrum: Du hast den UTF-8-codierten String "Jürgen". Das sind 6 Zeichen, aber 7 Bytes. Nun soll sprintf() auf 10 Zeichen auffüllen - sprintf() hängt an den 7-Byte-String also nur noch 3 anstatt 4 Leerzeichen an, weil die Funktion davon ausgeht, dass Zeichen und Bytes dasselbe sind.

Des Weitern: wenn utf8_decode aus dem utf-8-'ü' ein iso-'ü' macht hat das iso 'ü' auch nur ein Byte wie alle anderen Zeichen und sollte demnach auch genausoviel Platz für sich beanspruchen.

Wo codierst du von UTF-8 nach ISO um? Nach dem Formatieren mit spintf() oder davor? Wenn du es danach erst tust, ist es zu spät, dann wird die um 1 Zeichen versetzte Ausrichtung nur transformiert, so wie sie ist.

Seltsam ;)

Eigentlich nicht.

Ciao,
 Martin

--
F: Kennt jemand einen Automobilfilm?
A: Der mit dem Golf tankt.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(