Dans "Apprentissage PHP et MYSQL - Encodage de caractères (Partie 1)", la relation de conversion entre Unicode et UTF-8 est introduite et une règle d'encodage UTF-8 est résumée. Sur la base de cette règle d'encodage, un programme d'analyse d'encodage UTF-8. est écrit. , ce qui suit est l'implémentation de PHP :
/*
Fonction de programme, $str est une chaîne codée en UTF-8 mélangée avec du chinois et de l'anglais
Décodez et affichez cette chaîne correctement selon les règles d'encodage UTF-8.
*/
$str = 'Aujourd'hui, c'est très joyeux, alors nous avons décidé d'aller chez KFC pour manger des ailes de poulet au Coca !!!';
/*
$str doit être intercepté La chaîne
$len est le nombre de caractères interceptés
*/
function utf8sub($str,$len) {
if($len <= 0) {
return '' ;
}
$offset = 0; // Décalage lors de l'interception d'octets de poids fort
$chars = 0; // Nombre de caractères interceptés
$ res = '' ; // Stocke la chaîne de résultat interceptée
while($chars < $len){
// Prenez d'abord le premier octet de la chaîne
// Convertissez-le en décimal
// Puis convertissez en binaire
$high = ord(substr($str,$offset,1));
// echo '$high='. br />';
if($high == null ){ // Si le bit haut est nul, cela prouve qu'il a été récupéré jusqu'à la fin, break directement
break; >}
if( ($high>>2) === 0x3F){ // Décalez le bit haut vers la droite de 2 bits et comparez-le avec le binaire 111111. Si c'est pareil, prenez 6 octets
// Intercepter 2 octets
$count = 6;
}else if(($high>>3) === 0x1F){ // Décale le bit haut vers la droite de 2 bits et compare avec le binaire 11111. Si c'est pareil, prenez 5 octets
// Interceptez 3 octets
$count = 5
}sinon if(($high>>4) === 0xF) { // Décalez le bit haut vers la droite de 2 bits et comparez-le avec le binaire 1111. S'ils sont identiques, alors prenez 4 octets
// Prenez 4 octets
$count = 4; 🎜>}else if(($high>>5) === 0x7){ // Décalera le bit haut vers la droite de 2 bits et comparera avec le binaire 111. Si c'est pareil, prenez 3 octets
// Intercepter 5 octets
$count = 3;
}else if(($high> >6) === 0x3){ // Décale le bit haut vers la droite de 2 bits, compare avec le binaire 11, s'il est identique, prenez 2 octets
// Interceptez 6 octets
$count = 2;
}else if(($high>>7) === 0x0){ // Décalez le bit haut vers la droite de 2 bits et comparez-le avec le 0 binaire. S'ils sont identiques, prenez 1 octet
$count = 1;
}
// echo '$count='. $count.'
';
$res .= substr($str,$offset,$count); / / Supprime un caractère et connecte-le à la chaîne $res
$chars += 1; // Nombre de caractères interceptés + 1
$offset += $count; // Intercepte le décalage élevé et le déplace vers l'arrière de $count Bytes
}
return $res }
echo utf8sub($str,100);