Maison > développement back-end > tutoriel php > Comment obtenir correctement le nombre de caractères multi-octets avant un `preg_match()` ?

Comment obtenir correctement le nombre de caractères multi-octets avant un `preg_match()` ?

Susan Sarandon
Libérer: 2024-12-08 09:11:15
original
805 Les gens l'ont consulté

How to Correctly Get Multibyte Character Count Before a `preg_match()`?

Obtenez le nombre de caractères multi-octets avant la correspondance avec preg_match() (le paramètre PREG_OFFSET_CAPTURE compte inutilement les octets)

Dans les chaînes encodées en UTF-8, preg_match () peut signaler des décalages de caractères incorrects dans les correspondances capturées lors de l'utilisation du paramètre PREG_OFFSET_CAPTURE. La raison en est que les décalages capturés sont comptés en octets, même lorsque la chaîne sujet est interprétée comme UTF-8 avec le modificateur "u".

Solution :

Pour obtenir les décalages de caractères corrects dans les correspondances capturées UTF-8, utilisez mb_strlen pour calculer le nombre de caractères en fonction de l'octet UTF-8. compensations :

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][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