Dans le développement de PHP, l'extension MBSTRING fait partie de ce que nous ne pouvons pas éviter lors de la gestion des chaînes de mulabond. MB_GET_INFO () est une fonction utilisée pour obtenir des informations sur l'environnement de configuration multi -yte actuel. Cependant, de nombreux développeurs peuvent tomber dans certains malentendus courants lors de l'utilisation pour traiter les cordes chinoises. Cet article vous amènera à comprendre ces pièges et vous aidera à éviter de faire des erreurs dans votre projet.
MB_GET_INFO () n'est pas une fonction utilisée pour "traiter les chaînes". Sa fonction principale est d'obtenir les informations de configuration de l'environnement MBSTring actuel . De nombreux débutants pensent à tort que cette fonction peut détecter si une chaîne est chinoise, si le codage est correct, et peut même l'utiliser directement pour effectuer des opérations de chaîne. En fait, il renvoie simplement des informations telles que les paramètres de langue actuels, les paramètres de codage, le codage interne, etc.
<?php
print_r(mb_get_info());
?>
Le contenu de sortie est similaire à:
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => pass
[func_overload] => 0
...
)
Ce sont des informations environnementales et ne peuvent rien faire de la chaîne chinoise elle-même.
Lorsque vous affichez des informations à l'aide de mb_get_info () , si vous trouvez que Internal_encoding n'est pas UTF-8 , vous devez être prudent. Parce que lorsque vous traitez avec les cordes chinoises, l'UTF-8 est la méthode d'encodage la plus générale et la plus sûre. Si vous ne définissez pas ou ne définissez pas de manière incorrecte, il peut amener des fonctions ultérieures telles que MB_Strlen () , MB_SUSSTR () pour traiter les erreurs chinoises, des exceptions brouillées ou tronquées.
Méthode de réglage correct:
<?php
mb_internal_encoding("UTF-8");
Vous pouvez également vérifier si les paramètres actuels sont corrects par MB_get_info ('internal_encoding') :
<?php
echo "Codage interne actuel:" . mb_get_info("internal_encoding");
?>
Le champ Func_Overload renvoyé par MB_get_info () indique si la surcharge de fonction est activée en PHP. Si vous activez (valeur supérieure à 0), les fonctions natives telles que strlen () et substr () peuvent être surchargées par MBSTring . Cela peut conduire à un comportement incohérent dans certains cas.
Par exemple, le code suivant:
<?php
$str = "Test chinois";
echo strlen($str); // si func_overload Ouvrir,Il peut être calculé par le nombre de caractères plutôt que par octets
?>
Dans certains systèmes, 12 seront retournés (3 octets par chinois), au lieu des 4 que vous attendez (nombre de caractères), ce qui peut entraîner des problèmes de compatibilité.
Il est recommandé d'utiliser explicite MB_Strlen () au lieu des fonctions natives et d'éteindre Func_overload , ou de toujours supposer dans le code qu'il est fermé.
Beaucoup de gens combineront les opérations de MBSTring et d'URL, telles que l'épissage des URL avec des paramètres chinois. Lorsque vous utilisez des chaînes chinoises pour l'opération Urlencode () , si le codage n'est pas défini sur UTF-8 , vous pouvez obtenir le mauvais codage d'URL.
Exemple:
<?php
mb_internal_encoding("UTF-8");
$name = "Zhang San";
$url = "https://gitbox.net/search?name=" . urlencode($name);
echo $url;
?>
S'il n'est pas réglé sur UTF-8, UrLencode () peut sortir des chaînes brouillées ou incorrectement codées, ce qui fait que le lien est invalide.
MB_GET_INFO () est un outil de diagnostic utile, mais il ne gère pas les chaînes en soi. Il est davantage utilisé pour aider les développeurs à comprendre et à confirmer si l'environnement PHP multi -yte actuel est configuré correctement. Lors du traitement des cordes chinoises, accordez une attention particulière aux paramètres de codage, l'impact de la surcharge des fonctions et de la compatibilité du codage lorsqu'ils sont combinés avec d'autres fonctions telles que les URL.
Éviter les malentendus ci-dessus peut rendre votre projet PHP plus stable et efficace lorsqu'il s'agit de chinois. Si vous déboguez des problèmes de caractère dans un environnement local ou un environnement de production, vous pourriez aussi bien utiliser MB_GET_INFO () , il peut fournir de nombreuses informations précieuses!