Maison > développement back-end > tutoriel php > Pourquoi PREG_OFFSET_CAPTURE renvoie-t-il le nombre d'octets au lieu du nombre de caractères avec UTF8 et le modificateur « u » ?

Pourquoi PREG_OFFSET_CAPTURE renvoie-t-il le nombre d'octets au lieu du nombre de caractères avec UTF8 et le modificateur « u » ?

Linda Hamilton
Libérer: 2024-12-03 20:24:19
original
485 Les gens l'ont consulté

Why Does PREG_OFFSET_CAPTURE Return Byte Counts Instead of Character Counts with UTF8 and the 'u' Modifier?

PREG_OFFSET_CAPTURE Comptage des octets malgré l'expression UTF8

Lors de l'utilisation de preg_match avec le modificateur u pour le traitement UTF8, on peut rencontrer un comportement inattendu où PREG_OFFSET_CAPTURE renvoie le nombre d'octets au lieu du nombre de caractères .

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1]; // Prints 2, but should be 1 for "H" in "¡Hola!"
Copier après la connexion

Malgré le modificateur u en marquant le modèle et le sujet comme étant codés en UTF8, les décalages restent en octets. Pour obtenir des décalages basés sur les caractères, vous pouvez utiliser mb_strlen :

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][1])); // Prints 1
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal