Maison > développement back-end > tutoriel php > Comment extraire les points de code UCS-2 des caractères UTF-8 en PHP ?

Comment extraire les points de code UCS-2 des caractères UTF-8 en PHP ?

DDD
Libérer: 2024-10-31 18:00:15
original
377 Les gens l'ont consulté

How to Extract UCS-2 Code Points from UTF-8 Characters in PHP?

Détermination des points de code UCS-2 pour les caractères UTF-8 en PHP

La tâche à accomplir est d'extraire les points de code UCS-2 pour les caractères d'une chaîne UTF-8 donnée. Pour ce faire, une fonction PHP personnalisée peut être définie.

Tout d'abord, il est important de comprendre le schéma d'encodage UTF-8. Chaque caractère est représenté par une séquence de 1 à 4 octets, selon son point de code Unicode. Les plages pour chaque taille d'octet sont les suivantes :

  • 0xxxxxxx : 1 octet
  • 110xxxxx 10xxxxxx : 2 octets
  • 1110xxxx 10xxxxxx 10xxxxxx : 3 octets
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx : 4 octets

Pour déterminer le nombre d'octets par caractère, examinez le premier octet :

  • 0 : 1 octet de caractère
  • 110 : Caractère de 2 octets
  • 1110 : 3 octets caractère
  • 11110 : Caractère de 4 octets
  • 10 : Octet de suite
  • 11111 : Caractère invalide

Une fois le nombre d'octets déterminé, bit la manipulation peut être utilisée pour extraire le point de code.

PHP personnalisé Fonction :

Sur la base de l'analyse ci-dessus, voici une fonction PHP personnalisée qui prend un seul caractère UTF-8 en entrée et renvoie son point de code UCS-2 :

<code class="php">function get_ucs2_codepoint($char)
{
    // Initialize the code point
    $codePoint = 0;

    // Get the first byte
    $firstByte = ord($char);

    // Determine the number of bytes
    if ($firstByte < 128) {
        $bytes = 1;
    } elseif ($firstByte < 192) {
        $bytes = 2;
    } elseif ($firstByte < 224) {
        $bytes = 3;
    } elseif ($firstByte < 240) {
        $bytes = 4;
    } else {
        // Invalid character
        return -1;
    }

    // Shift and extract code point
    switch ($bytes) {
        case 1:
            $codePoint = $firstByte;
            break;
        case 2:
            $codePoint = ($firstByte & 0x1F) << 6;
            $codePoint |= ord($char[1]) & 0x3F;
            break;
        case 3:
            $codePoint = ($firstByte & 0x0F) << 12;
            $codePoint |= (ord($char[1]) & 0x3F) << 6;
            $codePoint |= ord($char[2]) & 0x3F;
            break;
        case 4:
            $codePoint = ($firstByte & 0x07) << 18;
            $codePoint |= (ord($char[1]) & 0x3F) << 12;
            $codePoint |= (ord($char[2]) & 0x3F) << 6;
            $codePoint |= ord($char[3]) & 0x3F;
            break;
    }

    return $codePoint;
}</code>
Copier après la connexion

Exemple d'utilisation :

Pour utiliser la fonction, fournissez simplement un caractère UTF-8 comme entrée :

<code class="php">$char = "ñ";
$codePoint = get_ucs2_codepoint($char);
echo "UCS-2 code point: $codePoint\n";</code>
Copier après la connexion

Sortie :

UCS-2 code point: 241
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal