你好 Elya,
irgendwie habe ich geahnt, daß es nicht ganz trivial ist ;-) Ich probiere
das heute abend mal aus, mal sehen, wie ich die octets aus dem String
gefummelt bekomme.
Ein Octet ist bei PHP in jedem Fall ein Byte und damit ein “Buchstabe”. Es
ist also trivial, einzelne Octets zu betrachten, substr($str,$pos,1) reicht
da aus, bzw. bei PHP geht ja auch $str{$pos}. Ueberpruefen, um welche
Art Zeichen es sich handelt, kannst du dann recht einfach mit
Bit-Operationen:
if(ord($str{$pos}) < 0x80) {
# ein Zeichen lang
}
else if(ord($str{$pos}) < 0x2c) {
# illegale UTF-8-Sequenz, dieser Werte-Bereich kann nicht
# auftreten als Start-Sequenz
}
else if(ord($str{$pos}) < 0xe0) {
# zwei Byte lang
}
else if(ord($str{$pos}) < 0xf0) {
# drei Byte lang
}
else if(ord($str{$pos}) < 0xf8) {
# vier Byte lang
}
# Support fuer 6-Byte-UTF8, wie es im ISO/IEC beschrieben ist
else if(ord($str{$pos}) < 0xfc) {
# fuenf Byte lang
}
else if(ord($str{$pos}) < 0xfe) {
# 6 Byte lang
}
else {
# illegale UTF-8-Sequenz, dieser Werte-Bereich kann nicht
# auftreten als Start-Sequenz
}
Ist allerdings nicht getestet, sollte aber funktionieren.
再见,
克里斯蒂安
--
Coincidence?! I THINK NOT!!
Coincidence?! I THINK NOT!!