Maison > développement back-end > Problème PHP > Comment convertir Unicode et utf8 en php

Comment convertir Unicode et utf8 en php

coldplay.xixi
Libérer: 2023-03-02 16:06:02
original
3061 Les gens l'ont consulté

Comment convertir Unicode en utf8 en php : 1. Convertir en utf8 Si les octets d'un caractère sont inférieurs à 128, il n'est pas nécessaire de convertir ensuite les chiffres binaires des chiffres inférieurs aux chiffres élevés. du binaire Unicode, 6 chiffres à la fois ;2. Pour convertir utf8 en Unicode, extrayez 0100 du premier octet de poids fort et déplacez-le vers la gauche dans l'ordre.

Comment convertir Unicode et utf8 en php

Comment convertir unicode et utf8 en php :

Encodage Unicode et Utf-8 La différence

Unicode est un jeu de caractères, et UTF-8 est l'un des Unicode de longueur fixe et tous sont à double octet, tandis que UTF-8 est variable. Pour les caractères chinois, disons qu'Unicode occupe 1 octet. inférieur à UTF-8. Unicode est composé de deux octets, tandis que les caractères chinois en UTF-8 occupent trois octets.

Les caractères codés en UTF-8 peuvent théoriquement mesurer jusqu'à 6 octets, mais les caractères BMP (Basic Multilingual Plane) 16 bits ne peuvent mesurer que 3 octets. Jetons un coup d'œil à la table d'encodage UTF-8 : La position de

U-00000000 - U-0000007F: 0xxxxxxx 
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Copier après la connexion

xxx est remplie par la représentation binaire du numéro d'encodage du caractère. Le x le plus à droite a une signification moins particulière, et seul le numéro d'encodage du caractère. le plus court suffit pour l'exprimer. Une chaîne multi-octets de chiffres codant des caractères. Notez que dans une chaîne multi-octets, le nombre de « 1 » au début du premier octet correspond au nombre d’octets dans la chaîne entière. La première ligne commence par 0 pour être compatible avec le codage ASCII, qui est d'un octet, la deuxième ligne est une chaîne à deux octets, la troisième ligne est de 3 octets, comme les caractères chinois, et ainsi de suite. (Personnellement, je pense : en fait, nous pouvons simplement considérer le nombre de 1 devant comme le nombre d'octets)

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Comment convertir Unicode en Utf-8

Pour convertir Unicode en UTF-8, vous devez bien sûr savoir quelle est la différence. Voyons comment l'encodage en Unicode est converti en UTF-8, si l'octet d'un caractère est inférieur à 0x80 (128), il s'agit d'un caractère ASCII, occupant un octet, et aucune conversion n'est effectuée. nécessaire car UTF-8 est compatible avec le codage ASCII. Si le codage du caractère chinois « vous » en Unicode est « u4F60 », convertissez-le en binaire en 100111101100000, puis convertissez-le selon la méthode UTF-8. Les chiffres binaires peuvent être extraits du binaire Unicode de bas en haut, en prenant 6 chiffres à la fois. Par exemple, les chiffres binaires ci-dessus peuvent être extraits dans le format indiqué ci-dessous. Les précédents sont remplis selon le format, et n'importe lequel. moins de 8 bits sont remplis par 0.

unicode: 100111101100000                   4F60
utf-8:    11100100,10111101,10100000       E4BDA0
Copier après la connexion

À partir de ce qui précède, vous pouvez voir intuitivement la conversion entre Unicode et UTF-8. Bien sûr, après avoir connu le format UTF-8, vous pouvez effectuer l'opération inverse, c'est-à-dire le convertir en binaire. selon le format, retirez-le de la position correspondante, puis convertissez-le en le caractère Unicode résultant (cette opération peut être effectuée par "déplacement"). Par exemple, dans la conversion ci-dessus de « vous », puisque sa valeur est supérieure à 0x800 et inférieure à 0x10000, elle peut être considérée comme un stockage sur trois octets. Ensuite, le bit le plus élevé doit être décalé vers la droite de « 12 » bits. puis selon le format sur trois octets, le bit le plus élevé est 11100000 (0xE0 ) ou (|) pour obtenir la valeur la plus élevée. De la même manière, le deuxième chiffre est décalé vers la droite de "6" bits, et la valeur binaire du chiffre le plus élevé et du deuxième chiffre est à gauche. Elle peut être calculée en effectuant l'opération de position (&) avec 111111 (0x3F. ), puis additionné avec 11000000 (0x80 ou (|). Il n'est pas nécessaire de décaler le troisième bit, prenez simplement les six derniers bits directement (& avec 111111 (ox3F)), puis OU (|) avec 11000000 (0x80).

Comment inverser Utf-8 en Unicode

Bien sûr, la conversion d'UTF-8 en Unicode se fait également par décalage, etc., c'est-à-dire conversion UTF-8 Le nombre binaire dans la position correspondante du format est extrait. Dans l'exemple ci-dessus, « vous » fait trois octets, donc chaque octet doit être traité, du bit haut au bit bas. En UTF-8, « vous » vaut 11100100,10111101,10100000. En partant du bit haut, le premier octet 11100100 consiste à retirer le "0100". C'est très simple. Il suffit de prendre le AND (&) avec 11111 (0x1F), on peut savoir que la position la plus élevée doit être. être avant le 12ème bit, car six chiffres sont pris à chaque fois. Par conséquent, le résultat obtenu doit être décalé de 12 bits vers la gauche, et le bit le plus élevé est désormais 0100,000000,000000. Le deuxième bit consiste à supprimer "111101", il vous suffit donc de AND (&) le deuxième octet 10111101 et 111111 (0x3F). Après avoir décalé le résultat de 6 bits vers la gauche et pris le résultat de l'octet le plus élevé ou (|), le deuxième bit est terminé et le résultat est 0100,111101,000000. Par analogie, le dernier chiffre est directement combiné par AND (&) avec 111111 (0x3F), puis par OR (|) avec le résultat précédent pour obtenir le résultat 0100,111101,100000.

Implémentation du code PHP

/**
 * utf8字符转换成Unicode字符
 * @param  [type] $utf8_str Utf-8字符
 * @return [type]           Unicode字符
 */
function utf8_str_to_unicode($utf8_str) {
    $unicode = 0;
    $unicode = (ord($utf8_str[0]) & 0x1F) << 12;
    $unicode |= (ord($utf8_str[1]) & 0x3F) << 6;
    $unicode |= (ord($utf8_str[2]) & 0x3F);
    return dechex($unicode);
}
/**
 * Unicode字符转换成utf8字符
 * @param  [type] $unicode_str Unicode字符
 * @return [type]              Utf-8字符
 */
function unicode_to_utf8($unicode_str) {
    $utf8_str = &#39;&#39;;
    $code = intval(hexdec($unicode_str));
    //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
    $ord_1 = decbin(0xe0 | ($code >> 12));
    $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
    $ord_3 = decbin(0x80 | ($code & 0x3f));
    $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
    return $utf8_str;
}
Copier après la connexion

Je l'ai testé

$utf8_str = &#39;我&#39;;
//这是汉字“你”的Unicode编码
$unicode_str = &#39;4f6b&#39;;
//输出 6211
echo utf8_str_to_unicode($utf8_str) . "<br/>";
//输出汉字“你”
echo unicode_str_to_utf8($unicode_str);
Copier après la connexion

Les conversions ci-dessus sont des tests pour les caractères chinois [qui sont généralement non-ASCII], car s'ils sont ASCII, c'est le c'est encore la même chose, donc il n'est pas nécessaire de dépenser autant d'efforts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal