Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-10-31 18:00:15237parcourir

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>

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>

Sortie :

UCS-2 code point: 241

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:
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