Lors du traitement des chaînes mulabytets (comme le chinois, le japonais, le coréen, etc.) en PHP, l'utilisation de fonctions de chaîne standard (comme Strlen ) conduit souvent à des résultats inattendus. Parce que ces fonctions sont calculées en octets, pas en caractères. À l'heure actuelle, nous devons utiliser des fonctions dans l'extension de chaîne MultiByte de PHP (MBSTRING), comme MB_Strlen et MB_GET_INFO , pour obtenir des opérations de chaîne plus précises.
Cet article vous guidera à travers l'utilisation de base de MB_Strlen et MB_get_info , et utilise des exemples pour illustrer comment ils vous aident à détecter avec précision la longueur des chaînes multi-gytets.
Jetons un coup d'œil à un exemple simple:
$str = "Bonjour,monde";
echo strlen($str); // Sortir:15
Cette chaîne n'a que 5 caractères chinois (y compris les virgules), mais renvoie 15. En effet, sous le codage UTF-8, un caractère chinois occupe généralement 3 octets. Strlen compte "numéro d'octet", pas "numéro de caractère".
Si nous voulons obtenir le vrai nombre de caractères, nous devons utiliser MB_STRLEN :
echo mb_strlen($str); // Sortir:5
De cette façon, nous obtenons le bon nombre de caractères.
MB_STRLEN est une fonction conçue spécifiquement pour les caractères multi -yte, avec la syntaxe comme suit:
int mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
$ str : La chaîne pour mesurer la longueur
$ Encoding : Facultatif, spécifiez le type de codage, par défaut pour utiliser le codage renvoyé par MB_internal_encoding ()
Exemple:
$str = "Bienvenue à visiter https://gitbox.net";
$length = mb_strlen($str, 'UTF-8');
echo "La longueur du caractère est:$length";
Sortir:
La longueur du caractère est:18
Cela compte correctement le "nombre de caractères" dans une chaîne chinoise et anglaise mixte, pas le nombre d'octets.
MB_GET_INFO peut vous aider à comprendre la configuration actuelle de MbString, en particulier la méthode de codage interne:
$info = mb_get_info();
print_r($info);
Exemple de sortie:
Array
(
[internal_encoding] => UTF-8
[http_input] => pass
[http_output] => pass
[language] => neutral
[encoding_translation] => 0
...
)
Cela nous indique que le codage UTF-8 est actuellement utilisé. Si vous constatez que les résultats du calcul MB_Strlen sont inexacts, il est utile de vérifier si le codage interne est réglé correctement.
Vous pouvez également spécifier pour retourner des informations spécifiques:
echo mb_get_info("internal_encoding"); // Sortir:UTF-8
Pour éviter les problèmes, il est recommandé de définir le codage par défaut de multi-girote au début du script:
mb_internal_encoding("UTF-8");
Cela garantit que les fonctions telles que MB_STRLEN , MB_SUBSTR et d'autres fonctions sont codées dans UTF-8 pour traiter les chaînes.