La syntaxe de base de la fonction MB_DECODE_NUMERICALENTITY est la suivante:
mb_decode_numericentity(string $str, array $map, string $encoding): string|false
$ STR : La chaîne à analyser est généralement une chaîne codée HTML ou XML contenant une entité numérique.
$ map : un tableau associatif qui définit la gamme de cartographie des entités numériques aux caractères.
$ Encodage : le codage des caractères de la chaîne d'entrée, généralement UTF-8 .
Le scénario d'utilisation le plus courant consiste à convertir des caractères HTML échappés (tels que "中") d'une page Web dans leurs caractères chinois correspondants (tels que "中"). Par exemple:
$input = "中文";
$output = mb_decode_numericentity($input, array(0x80, 0xFFFF), 'UTF-8');
echo $output; // Sortir “Chinois”
Cette fonction convertit le texte neutre en les caractères réels "milieu" et "texte".
L'un des problèmes les plus simples lors de l'utilisation de MB_DECODE_NUMERICALENTITY est le décroche de personnage. Cette fonction nécessite que la chaîne passée soit cohérente avec le paramètre de codage $ . Si la chaîne que vous avez entrée est GBK codage et transmet dans UTF-8 comme codage, cela peut rendre le résultat d'analyse incorrect.
Assurez-vous que la chaîne passée est cohérente avec le codage du paramètre de codage $ . Si votre chaîne est encodée GBK , elle doit être appelée comme ceci:
$output = mb_decode_numericentity($input, array(0x80, 0xFFFF), 'GBK');
De plus, il est préférable de vérifier et d'unifier le codage des caractères avant de coder la conversion.
Le paramètre MAP définit la plage de la carte de l'entité numérique. Si vous souhaitez convertir toutes les entités de caractères numériques HTML valides aux caractères correspondants, vous devez définir attentivement les paramètres de la carte . Si l'ensemble de plage est trop petit, certains caractères peuvent ne pas être analysés correctement.
Par exemple, si vous spécifiez uniquement le tableau (0x80, 0xffff) , seuls les caractères de ces gammes seront analysés. Si vous souhaitez analyser un jeu de caractères plus large, vous devrez peut-être ajuster cette plage.
D'une manière générale, l'utilisation du tableau (0, 0xffff) remplacera toutes les gammes d'entités de caractères valides. Par exemple:
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
Cette pratique garantit que vous pouvez analyser correctement les jeux de caractères les plus courants.
Certaines pages Web peuvent contenir à la fois des entités HTML (telles que & ) et des entités numériques (comme ici ). Si ces deux méthodes d'échappement sont utilisées en même temps, appeler MB_DECODE_NUMERICALENTITY directement ne peut traiter que des entités numériques, mais ne peut pas traiter automatiquement les entités HTML. Dans ce cas, il peut être nécessaire de convertir l'entité HTML en ses caractères correspondants à l'aide de la fonction html_entity_decode , puis de traiter l'entité numérique avec mb_decode_numericalentity .
Utilisez d'abord html_entity_decode pour traiter les entités HTML, puis utilisez MB_DECODE_NUMERICALENTITY pour analyser les entités numériques:
$input = html_entity_decode($input, ENT_QUOTES, 'UTF-8');
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
Cela garantit que les deux entités peuvent être analysées correctement.
La fonction MB_DECODE_NUMERICALENTITY est relativement lente à traiter, en particulier lorsqu'il s'agit de longues chaînes ou d'un grand nombre d'entités numériques. Si vous avez fréquemment besoin de ce type d'analyse dans votre application, vous pouvez rencontrer des goulots d'étranglement de performances.
Dans ce cas, il est possible de considérer l'optimisation de l'analyse. Par exemple, vous pouvez prétraiter l'entité à l'avant ou utiliser le cache pour éviter l'analyse de la même chaîne plusieurs fois.
La fonction MB_DECODE_NUMERICALENTITY renvoie false lors du traitement des entités numériques non valides. Si votre entrée contient des entités numériques non résolues, vous devez vérifier la valeur de retour de la fonction pour un traitement ultérieur.
Assurez-vous de déterminer si la valeur de retour est fausse après avoir appelé MB_DECODE_NUMERICALENTITY pour éviter les erreurs causées par la défaillance de l'analyse.
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
if ($output === false) {
echo "L'analyse a échoué!";
} else {
echo $output;
}