Tom: UTF-8 nur bei Strings, nicht bei einzelnen Zeichen?!

Beitrag lesen

Hello,

$text = "„Übersicht”";

Wenn ich diesen String ausgebe, erhalte ich „Übersicht”, also alles in bester Ordnung. Möchte ich aber nur ein bestimmtes Zeichen ausgeben und ist dieses zufällig ein Sonderzeichen, wie z.B. so:

echo $text[0];

dann bekomme ich nur ein Fragezeichen ... Mit Buchstaben klappt es wunderbar (bis auf Umlaute), nur eben nicht mit Sonderzeichen.

Das ist das Problem der Umstellung von einer Single-Byte-Codierung auf eine Multi-Byte-Codierung.

Alle Zugriffsmethoden, die auf dieser "unteren" Ebene stattfinden, klappen nicht mehr.
Mit $text[0] greifst Du tatsächlich auf der Byte-Ebene zu und erwischst dadurch nur einen Teil des Codes.

vergleiche mal strlen($text) und mb_strlen($text)

http://de2.php.net/manual/de/function.mb-strlen.php

Nicht umsonst gibt es schon etliche Multibyte-Funktionen in PHP.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)