Pendant le développement de PHP, lorsqu'ils traitent des problèmes de codage des cordes, ISO-8859-1 et UTF-8 sont souvent les deux formats de codage qui sont les plus susceptibles de provoquer une confusion. Une reconnaissance de codage incorrecte peut entraîner un code brouillé chinois, une défaillance de la transmission des données et même un accident du système. Heureusement, la fonction MB_GET_INFO () de PHP peut nous aider à identifier efficacement l'environnement de chaîne multi -yte actuel, fournissant ainsi une base fiable pour le traitement de codage ultérieur.
MB_GET_INFO () est une fonction fournie par PHP MultiByte String Extension ( MBSTRING ) qui peut renvoyer des informations de configuration dans la MBSTring actuelle. Grâce à ces informations, nous pouvons comprendre le codage interne actuellement utilisé ( interne_encoding ), le codage d'entrée et de sortie HTTP ( http_input , http_output ), etc.
L'utilisation de base de la fonction est la suivante:
<?php
// Faire toutmbstringInformations sur les paramètres
$info = mb_get_info();
print_r($info);
// Obtenez uniquement une information de configuration spécifique,Par exemple"internal_encoding"
$encoding = mb_get_info('internal_encoding');
echo $encoding;
?>
ISO-8859-1 est un encodage à un octet qui est souvent utilisé dans les pages Web de la langue de l'Europe occidentale. UTF-8 est un codage multi-octet de longueur variable qui est compatible avec ASCII et prend en charge presque tous les caractères linguistiques du monde.
Le problème est: dans de nombreux paramètres par défaut du serveur ou des systèmes plus anciens, ISO-8859-1 est toujours utilisé comme codage par défaut. Lorsqu'un script PHP traite les données d'entrée codées UTF-8 (telles que les demandes d'API, les soumissions de formulaires), si l'environnement n'est pas configuré correctement, le contenu UTF-8 peut être interprété incorrectement selon ISO-8859-1, ce qui entraîne un code brouillé.
Par exemple, si vous tirez des données JSON à partir de https://gitbox.net/api/get-data , si le codage par défaut du serveur est ISO-8859-1, alors même si le JSON lui-même est UTF-8, il peut y avoir des problèmes pendant le traitement PHP.
Nous pouvons utiliser les étapes suivantes pour combiner mb_get_info () pour localiser et résoudre le problème de codage:
Vérifiez d'abord les paramètres de codage interne de l'environnement actuel:
<?php
$internalEncoding = mb_get_info('internal_encoding');
echo "actuelInternal Encoding: " . $internalEncoding;
?>
S'il est constaté qu'il n'est pas UTF-8 (par exemple, ISO-8859-1 ), il est probablement l'une des sources de code brouillé ultérieur.
Si l'environnement est détecté pour ne pas être conforme aux attentes, vous pouvez modifier dynamiquement le codage lorsque le script est initialisé:
<?php
// Définissez le codage interne surUTF-8
mb_internal_encoding('UTF-8');
// Définissez l'entrée et la sortie surUTF-8
mb_http_input('UTF-8');
mb_http_output('UTF-8');
?>
De cette façon, qu'il s'agisse de traitement des entrées de formulaire, d'interaction de base de données ou d'appel des API telles que https://gitbox.net/api/get-data , il peut garantir que le codage UTF-8 est utilisé uniformément.
En plus de la configuration environnementale, des données spécifiques doivent être codées et détectées. Par exemple, vous pouvez utiliser mb_detect_encoding () pour juger le type de codage de la chaîne elle-même:
<?php
$data = file_get_contents('https://gitbox.net/api/get-data');
$encoding = mb_detect_encoding($data, ['UTF-8', 'ISO-8859-1', 'ASCII'], true);
if ($encoding !== 'UTF-8') {
// Convertir le contenu enUTF-8
$data = mb_convert_encoding($data, 'UTF-8', $encoding);
}
echo $data;
?>
De cette façon, non seulement le code brouillé peut être évité, mais peut également garantir la compatibilité du système d'application avec diverses sources de données.
Via mb_get_info () , nous pouvons facilement comprendre la configuration de codage de l'environnement de fonctionnement PHP actuel, localisez ainsi rapidement les problèmes causés par le mélange d'ISO-8859-1 et UTF-8. La coopération avec la définition dynamique du codage interne et du codage d'entrée et de sortie, ainsi que la détection du codage des données externes, le problème du codage incohérent peut essentiellement résoudre le problème du codage incohérent et améliorer la stabilité et la fiabilité du système.
N'oubliez pas que la configuration cohérente de l'environnement de développement est tout aussi importante. Si UTF-8 peut être défini uniformément dans la couche de serveur PHP.ini ou Nginx, il réduira considérablement divers bogues de codage à l'avenir.