In „PHP und MYSQL lernen – Zeichenkodierung (Teil 1)“ wird die Konvertierungsbeziehung zwischen Unicode und UTF-8 vorgestellt und eine UTF-8-Kodierungsregel zusammengefasst. Basierend auf dieser Kodierungsregel wird ein UTF-8-Kodierungsanalyseprogramm erstellt ist geschrieben. Das Folgende ist die Implementierung von PHP:
/*
Programmfunktion, $str ist eine UTF-8-codierte Zeichenfolge, gemischt mit Chinesisch und Englisch.
Diese Zeichenfolge wird gemäß den UTF-8-Codierungsregeln korrekt dekodiert und angezeigt.
*/
$str = 'Heute bin ich sehr glücklich, also haben wir beschlossen, zu KFC zu gehen, um Cola Chicken Wings zu essen!!!'; >$str soll abgefangen werden Die Zeichenfolge
$len ist die Anzahl der abgefangenen Zeichen
*/
function utf8sub($str,$len) {
if($len <= 0) {
return '' ;
}
$offset = 0; // Offset beim Abfangen höherwertiger Bytes
$chars = 0; // Anzahl der abgefangenen Zeichen
$ res = '' ; // Speichern Sie die abgefangene Ergebniszeichenfolge
while($chars < $len){
// Nehmen Sie zuerst das erste Byte der Zeichenfolge
// Wandeln Sie es in eine Dezimalzahl um
// Dann in Binär konvertieren
$high = ord(substr($str,$offset,1)); br />';
if($high == null ){ // Wenn das High-Bit null ist, beweist es, dass es bis zum Ende abgerufen wurde, direkt unterbrechen
break; >}
if( ($high>>2) === 0x3F){ // Verschiebe das High-Bit um 2 Bits nach rechts und vergleiche es mit der Binärzahl 111111. Wenn es dasselbe ist, nimm 6 Bytes
// 2 Bytes abfangen
$count = 6;
}else if(($high>>3) === 0x1F){ // Das High-Bit um 2 Bits nach rechts verschieben und vergleichen es mit binär 11111. Wenn es dasselbe ist, nimm 5 Bytes
// Intercept 3 Bytes
$count = 5
}else if(($high>>4) === 0xF) { // Verschiebe das High-Bit um 2 Bits nach rechts und vergleiche es mit binär 1111. Wenn sie gleich sind, dann nimm 4 Bytes
// Nimm 4 Bytes
$count = 4
}else if(($high>>5) === 0x7){ // Verschiebt das High-Bit um 2 Bits nach rechts und vergleicht es mit der Binärzahl 111. Wenn es dasselbe ist, nimm 3 Bytes
// 5 Bytes abfangen
$count = 3;
}else if(($high> >6) === 0x3){ // High-Bit um 2 Bit nach rechts verschieben, vergleichen mit binär 11, wenn gleich, 2 Bytes nehmen
// 6 Bytes abfangen
$count = 2;>7) === 0x0){ // Verschieben Sie das High-Bit um 2 Bits nach rechts und vergleichen Sie es mit binär 0. Wenn sie gleich sind, nehmen Sie 1 Byte
$count = 1; }
// echo '$count='. $count.'
';
$res .= substr($str,$offset,$count); / / Nimm ein Zeichen heraus und verbinde es mit $res string
$chars += 1; // Anzahl der abgefangenen Zeichen + 1
$offset += $count; // Den hohen Offset abfangen und um $count Bytes verschieben
return $res
}
echo utf8sub($str,100);