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

Comment convertir php utf8 en unicode

Jul 18, 2020 am 09:29 AM
unicode utf8

Comment convertir php utf8 en unicode : créez d'abord un exemple de fichier PHP ; puis définissez une méthode "utf8_str_to_unicode" ; puis implémentez la fonction de conversion via les fonctions ord et dechex ;

Comment convertir php utf8 en unicode

PHP implémente la conversion mutuelle entre l'encodage Unicode et Utf-8

Récemment, j'ai eu besoin d'utiliser Unicode conversion d'encodage, j'ai vérifié les fonctions de la bibliothèque PHP, mais je n'ai pas trouvé de fonction capable d'encoder et de décoder les chaînes Unicode ! Eh bien, si vous ne le trouvez pas, implémentez-le vous-même. . .

La différence entre l'encodage Unicode et Utf-8

Unicode est un jeu de caractères, et UTF-8 est l'un des Unicode à longueur fixe. , alors que UTF-8 est variable Pour les caractères chinois, Unicode occupe 1 octet de moins que 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 nombres de codage de 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)

Comment convertir Unicode en Utf-8

Dans 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.

Le résultat doit donc être décalé vers la gauche de 12 bits, 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 AND (&) avec 111111 (0x3F), puis 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.

De plus, ces deux fonctions sont simplement implémentées et ne prennent en charge que la conversion d'un seul caractère [un caractère utf8 complet ou un caractère Unicode complet] l'une vers l'autre. Si vous le comprenez, vous pouvez en profiter. . .

Recommandé : "Tutoriel PHP"

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Combien d'octets les caractères chinois codés en utf8 occupent-ils ? Combien d'octets les caractères chinois codés en utf8 occupent-ils ? Feb 21, 2023 am 11:40 AM

Les caractères chinois codés en UTF8 occupent 3 octets. En codage UTF-8, un caractère chinois équivaut à trois octets et un signe de ponctuation chinois occupe trois octets, tandis qu'en codage Unicode, un caractère chinois (y compris le chinois traditionnel) équivaut à deux octets. UTF-8 utilise 1 à 4 octets pour coder chaque caractère. Un caractère US-ASCIl n'a besoin que de 1 octet pour coder. Le latin, le grec, le cyrillique, l'arménien et l'hébreu avec des signes diacritiques, l'arabe, le syriaque et d'autres lettres nécessitent 2 octets. codage.

Compréhension approfondie de PHP : méthode d'implémentation de conversion de JSON Unicode en chinois Compréhension approfondie de PHP : méthode d'implémentation de conversion de JSON Unicode en chinois Mar 05, 2024 pm 02:48 PM

Compréhension approfondie de PHP : méthode d'implémentation de conversion de JSONUnicode en chinois Au cours du développement, nous rencontrons souvent des situations où nous devons traiter des données JSON, et l'encodage Unicode en JSON nous posera quelques problèmes dans certains scénarios, en particulier lorsqu'Unicode doit être converti Lorsque l'encodage est converti en caractères chinois. En PHP, certaines méthodes peuvent nous aider à réaliser ce processus de conversion. Une méthode courante sera présentée ci-dessous et des exemples de code spécifiques seront fournis. Tout d’abord, comprenons d’abord le Un en JSON

Comment convertir Unicode en chinois Comment convertir Unicode en chinois Dec 14, 2023 am 10:57 AM

Unicode est une norme de codage de caractères utilisée pour représenter diverses langues et symboles. Pour convertir le codage Unicode en caractères chinois, vous pouvez utiliser les fonctions intégrées de Python chr() et ord().

Essayez la méthode pour résoudre le problème des caractères chinois tronqués dans Eclipse Essayez la méthode pour résoudre le problème des caractères chinois tronqués dans Eclipse Jan 03, 2024 pm 05:28 PM

Êtes-vous gêné par les caractères chinois tronqués dans Eclipse ? Pour essayer ces solutions, vous avez besoin d'exemples de code spécifiques. 1. Introduction générale Avec le développement continu de la technologie informatique, le chinois joue un rôle de plus en plus important dans le développement de logiciels. Cependant, de nombreux développeurs rencontrent des problèmes de code tronqué lorsqu'ils utilisent Eclipse pour le développement chinois, ce qui affecte l'efficacité du travail. Ensuite, cet article présentera quelques problèmes courants de code tronqué et donnera les solutions correspondantes et des exemples de code pour aider les lecteurs à résoudre le problème du code tronqué chinois dans Eclipse. 2. Problèmes courants de code tronqué et fichiers de solutions

Tutoriel PHP : Comment convertir JSON Unicode en caractères chinois Tutoriel PHP : Comment convertir JSON Unicode en caractères chinois Mar 05, 2024 pm 06:36 PM

JSON (JavaScriptObjectNotation) est un format d'échange de données léger couramment utilisé pour l'échange de données entre applications Web. Lors du traitement des données JSON, nous rencontrons souvent des caractères chinois codés Unicode (tels que « u4e2du6587 ») et devons les convertir en caractères chinois lisibles. En PHP, nous pouvons réaliser cette conversion grâce à quelques méthodes simples. Ensuite, nous détaillerons comment convertir JSONUnico

Résoudre le problème de l'encodage incohérent du jeu de caractères Unicode lorsque Java se connecte à la base de données MySQL Résoudre le problème de l'encodage incohérent du jeu de caractères Unicode lorsque Java se connecte à la base de données MySQL Jun 10, 2023 am 11:39 AM

Avec le développement de technologies telles que le Big Data et le Cloud Computing, les bases de données sont devenues l’une des pierres angulaires de l’informatisation des entreprises. Dans les applications développées en Java, la connexion à la base de données MySQL est devenue la norme. Cependant, dans ce processus, nous rencontrons souvent un problème épineux : un codage de jeu de caractères Unicode incohérent. Cela affectera non seulement notre efficacité de développement, mais également les performances et la stabilité de l'application. Cet article explique comment résoudre ce problème et permettre à Java de se connecter plus facilement à la base de données MySQL. 1.Unicode

Quelles sont les différences entre Unicode et Ascii Quelles sont les différences entre Unicode et Ascii Sep 06, 2023 am 11:56 AM

Les différences entre Unicode et Ascii incluent différentes plages de codage, différents espaces de stockage et différentes compatibilités. Introduction détaillée : 1. La plage de codage de l'ASCII est 0-127, qui est principalement utilisée pour représenter les lettres anglaises. La plage de codage de l'Unicode est beaucoup plus large et peut représenter presque tous les caractères de langue ; l'espace est différent. ASCII utilise généralement 1 octet pour stocker un caractère, tandis qu'Unicode peut utiliser 2 octets ou plus pour stocker un caractère 3. Compatibilité différente, etc.

Que faire si les caractères chinois du nœud utf8 sont tronqués Que faire si les caractères chinois du nœud utf8 sont tronqués Feb 08, 2023 am 10:29 AM

Solution aux caractères chinois tronqués dans le nœud utf8 : 1. Vérifiez le type de "SarchName" via "typeof" ; 2. Utilisez "Name=iconv.decode(name,'gbk')" pour convertir l'encodage en utf8.

See all articles