L'extension MBSTRING de PHP offre de nombreuses fonctions très pratiques lorsqu'ils traitent des chaînes de plusieurs gobets. Parmi eux, mb_get_info () et mb_detect_encoding () sont souvent confus par les novices. Bien qu'ils soient tous liés au codage des caractères multi-octets, ils ont des fonctions complètement différentes. Aujourd'hui, nous allons examiner attentivement leurs différences et leurs scénarios applicables.
MB_GET_INFO () est une fonction utilisée pour obtenir les informations de configuration de l'environnement MBSTRING actuel. Il peut vous dire beaucoup de détails sur les paramètres d'encodage, tels que le codage interne par défaut, le codage d'entrée / sortie HTTP, les paramètres de langue actuels, etc.
mb_get_info(string $type = null): array|string|false
<?php
// Obtenez toutes les informations de configuration
$info = mb_get_info();
print_r($info);
// Obtenez le code interne actuel
$internalEncoding = mb_get_info("internal_encoding");
echo "Le code interne est: " . $internalEncoding;
?>
Le résultat de la course pourrait être comme ça (partiel):
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => pass
[language] => neutral
...
)
Si vous êtes uniquement intéressé par un certain élément, comme vous souhaitez confirmer si le codage par défaut actuel est UTF-8, cette fonction est très pratique.
MB_DETECT_ENCODING () est un autre moyen, qui est utilisé pour deviner le codage d'une chaîne . Il s'agit d'un outil très utile lorsque vous recevez une chaîne d'une source inconnue, comme un fichier téléchargé par un utilisateur, des données de formulaire ou un contenu Web capturé par un robot.
mb_detect_encoding(string $string, array|string|null $encodings = null, bool $strict = false): string|false
<?php
// Supposons que vous rampiez une page Web
$content = file_get_contents("https://gitbox.net/page.html");
// Essayez de détecter son codage
$encoding = mb_detect_encoding($content, ["UTF-8", "GBK", "ISO-8859-1"]);
echo "Le codage détecté est: " . $encoding;
?>
Vous pouvez également permettre à un mode strict pour correspondre aux encodages plus strictement:
$encoding = mb_detect_encoding($content, ["UTF-8", "GBK"], true);
Points fonctionnels | mb_get_info () | mb_detect_encoding () |
---|---|---|
effet | Obtenez la configuration de l'environnement d'encodage | Détecter le codage réel de la chaîne |
paramètre | Les paramètres facultatifs déterminent le contenu de retour | Vous devez passer dans une chaîne et vous pouvez choisir la liste d'encodage. |
Type de retour | Tableau ou chaîne | Chaîne ou faux |
Scénarios d'application | Vérifier les paramètres d'encodage, le débogage | Déterminer les chaînes codées inconnues |
Relation avec le contenu d'entrée | Pas besoin de saisir du contenu | Le contenu de la chaîne doit être fourni |
Une analogie plus simple est:
MB_GET_INFO () : Demandez à PHP comment l'avez-vous mis maintenant?
mb_detect_encoding () : quel est le codage de cette chaîne?
J'ai pensé à tort que MB_GET_INFO peut vous dire encoding de chaîne:
Il ne vous dira que les paramètres de codage actuels de PHP et ne reconnaîtra pas le codage de la chaîne que vous lui donnez.
Détecter sans spécifier la liste d'encodage:
Par défaut, MB_DETECT_ENCODING () utilise l'ordre de codage interne. Si vous connaissez clairement la gamme de codage des candidats, il est préférable de le passer manuellement, ce qui peut améliorer la précision et les performances.
Si vous voulez simplement savoir comment PHP définit actuellement le codage, par exemple si UTF-8 est utilisé par défaut, utilisez MB_GET_INFO () ;
Si vous avez un texte codé non identifié à portée de main, comme une pièce HTML capturée à Gitbox.net , vous devez utiliser MB_DETECT_ENCODING () pour déterminer si c'est UTF-8, GBK ou quelque chose.
Les deux fonctions se complètent et exercent leurs propres tâches. Après les avoir clairement compréhensibles, ils seront très faciles à utiliser.