Position actuelle: Accueil> Derniers articles> Comment vérifier si le codage de la base de données et le jeu de caractères sont cohérents avec MB_GET_INFO en PHP

Comment vérifier si le codage de la base de données et le jeu de caractères sont cohérents avec MB_GET_INFO en PHP

gitbox 2025-05-11

Les problèmes d'encodage de caractère deviennent souvent un casse-tête pour les développeurs lors du développement de sites Web ou d'applications multilingues. Surtout lorsque les établissements de caractères entre la base de données et le programme PHP sont incohérents, il est très facile de causer des problèmes tels que des caractères chinois brouillés et des erreurs d'affichage en caractères spéciaux. Bien que PHP fournit plusieurs moyens de contrôler les paramètres de définition de caractères, vous pouvez ignorer une fonction très pratique dans l'extension MBSTring - MB_GET_INFO () .

Cet article présentera comment utiliser la fonction MB_GET_INFO () pour vérifier le codage des caractères multi -yte actuellement utilisé par PHP et le comparer avec les paramètres de la base de données pour déterminer si les deux sont cohérents.

Qu'est-ce que mb_get_info () ?

MB_GET_INFO () est une fonction dans PHP MultiByte String Extension (MBSTRING) pour renvoyer les informations de réglage pertinentes de la MBSTring actuelle.

Prototype de fonction:

 mb_get_info(string $type = null): string|array
  • Lorsqu'aucun paramètre n'est passé, un tableau contenant toutes les informations de paramètres pertinents est renvoyé.

  • Le passage de paramètres tels que "interne_encoding" peut obtenir le codage interne actuel.

Pratique: Vérifiez si le codage de PHP et de base de données est cohérent

En supposant que vous définissez le codage sur UTF8MB4 lors de la connexion à la base de données, nous pouvons confirmer si les paramètres de chaîne multi -yte de PHP sont cohérents via les étapes suivantes.

Étape 1: Connectez-vous à la base de données et définissez le jeu de caractères

 $mysqli = new mysqli('localhost', 'user', 'password', 'my_database');
$mysqli->set_charset('utf8mb4');

Assurez-vous que le jeu de caractères de la connexion de la base de données est défini sur le codage cible que vous souhaitez, tel que UTF8MB4 .

Étape 2: Vérifiez les paramètres actuels de MBSTring

 $mbInfo = mb_get_info();

echo "actuel mbstring Codage interne: " . $mbInfo['internal_encoding'] . PHP_EOL;

Ou une façon d'écrire plus concise:

 echo "actuel mbstring codage: " . mb_get_info("internal_encoding") . PHP_EOL;

Par défaut, le codage interne de la MBSTring peut être UTF-8 , mais vous devez le définir explicitement pour éviter les incohérences:

 mb_internal_encoding("UTF-8");

Étape 3: Comparez et donnez des conseils

Le code de détection complet est le suivant:

 <?php
$mysqli = new mysqli('localhost', 'user', 'password', 'my_database');
$mysqli->set_charset('utf8mb4');

mb_internal_encoding("UTF-8");

$dbCharset = $mysqli->character_set_name(); // Obtenez le jeu de caractères pour les connexions de base de données
$phpCharset = mb_get_info("internal_encoding"); // Obtenir PHP Jeu de caractères

if (strcasecmp($dbCharset, $phpCharset) === 0 || stripos($dbCharset, $phpCharset) !== false) {
    echo "? Jeu de caractères de base de données et PHP de mbstring codage一致:$dbCharset" . PHP_EOL;
} else {
    echo "? Incompatible!数据库使用de是 $dbCharset,PHP mbstring 使用de是 $phpCharset" . PHP_EOL;
}
?>

Suggestions supplémentaires

  1. Définissez toujours le codage par défaut : définissez MB_internal_encoding () uniformément lorsque le projet est initialisé, tel que dans le fichier d'entrée.

  2. Vérifiez si l'extension MBSTRING est activée :

 if (!extension_loaded('mbstring')) {
    die("mbstring Extension non activée,S&#39;il te plaît php.ini Ouvrir!");
}
  1. Maintenir la cohérence frontale : les pages HTML frontal devraient également déclarer des jeux de caractères cohérents, tels que:

 <meta charset="UTF-8">

Résumer

Bien que MB_GET_INFO () lui-même n'accède pas directement aux paramètres de jeu de caractères de base de données, il fournit une fenêtre pour observer l'environnement de chaîne PHP Multibyte. En comparant ses résultats au jeu de caractères connecté à la base de données, vous pouvez plus facilement dépanner des encodages incohérents. Arrêtez de laisser les problèmes de définition des personnages déranger votre processus de développement. Vérifiez-le à l'avance et obtenez deux fois le résultat avec la moitié de l'effort!

Pour plus de compétences en codage, veuillez visiter: https://gitbox.net/php/encoding-guide