Lorsque vous travaillez avec des chaînes à l'aide de PHP, il est important de s'assurer que les chaînes sont dans le format de codage correct, en particulier dans les scénarios impliquant un contenu multilingue. UTF-8 est l'un des encodages de personnages les plus populaires à l'heure actuelle, et il prend en charge la plupart des langues du monde. Cet article présentera comment déterminer si une chaîne est un codage UTF-8 via la fonction MB_GET_INFO , combinée avec d'autres fonctions d'extension MBSTring.
Tout d'abord, MB_GET_INFO () lui-même est utilisé pour obtenir les informations de configuration de l'extension MBSTring, telles que le codage interne actuel, l'ordre de détection, etc. Il ne détecte pas directement le codage des chaînes , mais il peut nous dire si l'environnement actuel est configuré pour détecter UTF-8.
Habituellement, nous combinerons la fonction MB_DETECT_ENCODING () pour implémenter la détection de codage.
Pour afficher la configuration actuelle de MbString, vous pouvez l'écrire comme ceci:
<?php
// Vérifier mbstring Configuration actuelle
print_r(mb_get_info());
?>
Les informations de sortie comprennent:
interne_encoding
http_input
http_output
langue
Encoding_translation
détect_ordre
Substitute_Character et ainsi de suite.
Si le détect_order contient UTF-8 , nous pouvons utiliser MB_DETECT_ENCODING () pour détecter si la chaîne est UTF-8.
Combiné avec la fonction mb_detect_encoding () , vous pouvez juger de cette façon:
<?php
function is_utf8($string) {
// Si nécessaire,Vous pouvez vous assurer d'abord detect_order Inclus dans UTF-8
$info = mb_get_info();
if (strpos($info['detect_order'], 'UTF-8') === false) {
// Définir manuellement l'ordre de détection
mb_detect_order(['UTF-8', 'ISO-8859-1', 'ASCII']);
}
// utiliser mb_detect_encoding Venir tester
return mb_detect_encoding($string, 'UTF-8', true) === 'UTF-8';
}
// Exemple
$text = "Ceci est un test";
if (is_utf8($text)) {
echo "La chaîne est UTF-8 codage";
} else {
echo "La chaîne n'est pas UTF-8 codage";
}
?>
Expliquez ce code:
Vérifiez d'abord l'ordre de détection des caractères actuel via MB_GET_INFO () ;
S'il n'y a pas UTF-8 , utilisez MB_DETECT_ORDER () pour l'ajuster temporairement;
Utilisez MB_DETECT_ENCODING () et passez dans le troisième paramètre vrai pour indiquer une détection stricte;
Enfin, déterminez si le résultat de retour est «UTF-8» .
Assurez-vous que PHP a des extensions MBSTRING installées et activées.
MB_DETECT_ENCODING () n'est pas précis à 100%, en particulier dans les chaînes courtes ou les cordes en anglais pures, mais est suffisamment fiable pour les applications générales.
Si votre demande traite beaucoup de problèmes de codage, il est recommandé d'unifier les formats de codage de l'entrée et de la sortie, et de définir explicitement le codage interne via MB_INTERNAL_ENCODING ('UTF-8') .
Si vous souhaitez voir l'exemple complet, vous pouvez visiter: https://gitbox.net/php/utf8-check-demo