Position actuelle: Accueil> Derniers articles> Comment définir correctement le tableau de plage de MB_DECODE_NUMERICALENTITY? Exemple détaillé Description

Comment définir correctement le tableau de plage de MB_DECODE_NUMERICALENTITY? Exemple détaillé Description

gitbox 2025-05-29

Dans PHP, la fonction MB_DECode_Numericality est utilisée pour convertir les entités numériques dans une chaîne en caractères correspondants. Ceci est très utile lors de la gestion du codage des caractères multi -yte, comme la conversion du texte contenant des entités HTML. Régler correctement son tableau de plage est la clé pour s'assurer que la fonction fonctionne correctement.


1. Introduction à la fonction MB_DECODE_NUMERICALENTITY

 string mb_decode_numericentity ( string $string , array $map , string $encoding = mb_internal_encoding() )
  • $ String : la chaîne à convertir.

  • $ map : tableau de plage, définissant la plage de conversion et le décalage des entités numériques.

  • $ Encodage : codage des caractères, encodage par défaut interne.


2. Format et règles de gamme Array $ map

Un tableau de plage est un tableau unidimensionnel, et sa longueur doit être des multiples de 4. Chaque 4 éléments représentent une plage de conversion:

 [
    start_codepoint, end_codepoint, offset, mask,
    start_codepoint, end_codepoint, offset, mask,
    ...
]
  • start_codepoint : démarrage du point de code Unicode (décimal).

  • end_codepoint : End Unicode Code Point (Decimal).

  • Offset : le décalage (généralement 0) s'appliquait à la valeur de l'entité numérique.

  • Masque : masque, utilisé pour les opérations de bits, généralement 0xffff ou 0xfffffff.

Remarque: MB_DECode_numericality ne convertira que des caractères dont les points de code d'entité numérique se situent dans la plage start_codepoint à end_codepoint .


3. Exemple: définissez correctement le tableau de plage

Supposons que la gamme Unicode couverte par l'entité numérique que nous souhaitons convertir est le plan de base Multitext (BMP), c'est-à-dire de 0x0 à 0xffff:

 $map = [
    0x0, 0xFFFF, 0, 0xFFFF
];

Voici l'explication:

  • Convertit les entités numériques de 0 à 65535 pour tous les points de code Unicode.

  • Offset 0 signifie que le point de code de l'entité numérique d'origine n'est pas ajusté.

  • Le masque 0xffff est utilisé pour garantir que le résultat de conversion est limité à la plage 16 bits.


4. Exemple de code complet

 <?php
// La chaîne à convertir,Contient des entités numériques
$input = "Hello &#20320;&#22909;!"; // “Hello Bonjour!”

// Définir le tableau de plage de conversion,ConvertirBMPL&#39;entité de la portée
$map = [0x0, 0xFFFF, 0, 0xFFFF];

// utilisermb_decode_numericentityConvertir
$output = mb_decode_numericentity($input, $map, 'UTF-8');

echo $output;  // Sortir:Hello Bonjour!
?>

5. Choses à noter

  1. Le tableau de plage doit être un multiple de 4 , sinon la fonction sera invalide.

  2. Le décalage est généralement défini sur 0 , sauf indication contraire.

  3. Le masque est généralement 0xffff (16 bits) ou 0xfffffff (32 bits), selon la plage Unicode.

  4. Si l'entité numérique est hors de portée, la fonction ne le convertit pas.


6. Résumé

  • Le tableau de plage de MB_DECODE_NUMERICALENTITY détermine quelles entités numériques sont converties.

  • Définissez des points et des masques de code de début et de fin raisonnables pour vous assurer que les caractères cibles peuvent être analysés correctement.

  • Pour la plupart des scènes ordinaires, définissez [0x0, 0xffff, 0, 0xfff] pour satisfaire la conversion de caractères de la plage BMP.

La maîtrise des paramètres de tableau de plage vous permet de gérer de manière flexible diverses entités de caractères codées à plusieurs octets, d'éviter le code brouillé et les erreurs d'analyse.