Hallo,
ich versuche, kyrillische utf-8-Zeichenketten nach bestimmten definierten Regeln in lateinische umzusetzen.
Der Haken ist der Zweierschritt in dem substr-Ausdruck oben.
Ja, wie viele octets ein Zeichen in UTF-8 hat, erkennst Du an den hochwertigsten bits des Startzeichens http://rfc.sunsite.dk/rfc/rfc3629.html
...
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
...
Du musst also octet für octet (byte für byte) aus dem String nehmen und prüfen.
Steht vorn eine 0, dann ist das octet das Zeichen.
Steht vorn 110, dann besteht das Zeichen aus 2 octets.
usw...
Das gilt allerdings nur für UTF-8. Unicode kann auch in anderen encodings vorliegen http://www.unicode.org/faq/utf_bom.html.
viele Grüße
Axel