Position actuelle: Accueil> Derniers articles> Utilisez MB_GET_INFO pour résoudre le problème brouillé dans la conversion de codage des caractères

Utilisez MB_GET_INFO pour résoudre le problème brouillé dans la conversion de codage des caractères

gitbox 2025-05-11

Lors du développement de sites Web multilingues ou de traitement des sources de données externes, la confusion du codage des caractères est souvent un mal de tête. Si les paramètres d'encodage sont incorrects, le code brouillé se produira au moins et les données seront perdues et la fonction sera anormale.
En PHP, l'extension MBSTRING fournit de nombreuses fonctions pour le traitement des caractères multi -yte, parmi lesquels MB_GET_INFO () est un outil très utile pour positionner les problèmes d'encodage.

Qu'est-ce que mb_get_info ()

MB_GET_INFO () est une fonction dans l'extension PHP MBSTRING pour obtenir les informations de configuration du traitement de chaîne multi -yte actuel.
Il peut renvoyer le codage interne actuel, le codage d'entrée / sortie HTTP, les paramètres de langue, etc., nous aidant à comprendre rapidement l'environnement de codage actuel du script.

La signature de la fonction est très simple:

 array mb_get_info ([ string $type = "all" ] )

Si aucun paramètre n'est passé, toutes les informations de configuration seront renvoyées par défaut. Si vous passez un type, tel que "interne_encoding" , seules les informations correspondantes seront retournées.

Pourquoi l'encodage des personnages provoque-t-il un code brouillé?

PHP n'est pas très "sensible" au codage des caractères par défaut, en particulier lors de la gestion des codages multi-octets tels que UTF-8, GBK et Shift-Jis, le code brouillé se produira s'il est légèrement traité.
Les raisons courantes sont:

  • Le codage d'entrée est incompatible avec le traitement du script

  • Les paramètres de codage de la sortie sont incorrects

  • Erreurs de codage lors de la connexion de la base de données

  • Problèmes de réglage des paramètres par défaut du serveur par défaut

Pour le moment, si vous ne savez pas quel codage est utilisé dans l'environnement actuel, il sera difficile de prescrire le bon médicament. Et mb_get_info () peuvent nous aider à le découvrir.

Comment dépanner le code brouillé avec mb_get_info () ?

Voici un exemple simple qui montre comment utiliser mb_get_info () pour localiser les problèmes:

 <?php
// Afficher toutes les configurations pour le traitement actuel de multicette
$info = mb_get_info();
print_r($info);

// Concentrez-vous sur le codage interne
echo "Internal Encoding: " . mb_internal_encoding() . PHP_EOL;

// Définissez le codage sur UTF-8,Évitez le code brouillé
mb_internal_encoding("UTF-8");

// Vérifiez-le à nouveau
echo "New Internal Encoding: " . mb_internal_encoding() . PHP_EOL;
?>

La sortie peut être similaire à:

 Array
(
    [internal_encoding] => UTF-8
    [http_output] => UTF-8
    [http_input] => UTF-8
    [language] => neutral
    ...
)
Internal Encoding: UTF-8
New Internal Encoding: UTF-8

Si vous constatez que Internal_Encoding n'est pas UTF-8 (par exemple, ISO-8859-1 ), il est probable qu'il soit la source du code brouillé.
En réinitialisant directement avec mb_internal_encoding ("utf-8") , vous pouvez éviter le problème du code brouillé.

Cas pratique: empêcher la sortie du code brouillé sur les pages Web

Supposons que vous ayez une interface simple qui renvoie l'entrée de l'utilisateur à l'avant, comme ceci:

 <?php
header('Content-Type: text/html; charset=UTF-8');

// Vérifiez le code interne actuel
if (mb_internal_encoding() !== 'UTF-8') {
    mb_internal_encoding('UTF-8');
}

// Assumer la saisie de l&#39;utilisateur(Probablement du formulaire、Interface, etc.)
$user_input = "Bonjour,monde!";

// Sortir
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>

Ici, même si l'utilisateur soumet d'autres encodages, tels que GB2312, le serveur les traite uniformément en UTF-8 et les publie, la probabilité de code brouillé peut être considérablement réduite.
Si une détection de codage plus complète est requise, vous pouvez également l'utiliser avec mb_detect_encoding () pour identifier et convertir automatiquement.

Supplémentaire: adresse du document

Si vous voulez en savoir plus sur l'utilisation de mb_get_info () et de mbString , vous pouvez vous référer à la documentation officielle:
https://gitbox.net/php/manual/zh/fonction.mb-get-info.php