Position actuelle: Accueil> Derniers articles> Comment combiner MB_GET_INFO avec MB_STRLEN pour la détection de longueur de chaîne

Comment combiner MB_GET_INFO avec MB_STRLEN pour la détection de longueur de chaîne

gitbox 2025-05-11

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.

1. Pourquoi Strlen ne peut-il pas être utilisé directement?

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.

2. Utilisez MB_Strlen pour calculer avec précision la longueur du caractère

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.

3. Comment utiliser MB_GET_INFO pour obtenir des informations d'encodage?

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

4. Suggestions: définissez le codage par défaut

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.