Lorsque vous utilisez PHP pour faire fonctionner les bases de données MySQL, les problèmes de codage des caractères sont souvent l'un des problèmes les plus gênants pour les développeurs, en particulier lorsqu'il implique des personnages non anglais tels que le chinois, le japonais et le coréen. Beaucoup de gens rencontrent du code brouillé chinois après avoir inséré ou interrogé la base de données, ce qui est souvent dû au jeu de caractères correctement.
Cet article expliquera comment utiliser la méthode MySQLI :: Get_Charset pour vérifier les paramètres du jeu de caractères de la connexion MySQLI actuelle pour s'assurer que les caractères non anglais (tels que chinois) peuvent être correctement codés.
MySQL prend en charge plusieurs jeux de caractères, tels que Latin1 , UTF8 , UTF8MB4 , etc. Si votre site Web contient du contenu chinois, il est recommandé d'utiliser UTF8MB4 car il est compatible avec les emoji et presque tous les caractères Unicode.
Mais la définition d'un jeu de caractères au niveau de la base de données n'est pas suffisante, et vous devez également définir un jeu de caractères cohérent dans la connexion entre PHP et la base de données. Sinon, les données envoyées à la base de données peuvent avoir été codées à tort avant l'arrivée, entraînant un code brouillé.
La méthode MySQLI :: Get_Charset peut être utilisée pour afficher les informations du jeu de caractères utilisées par la connexion actuelle et renvoie un objet contenant les détails du jeu de caractères. Avec cette méthode, vous pouvez rédiger un code de détection pour vous assurer que la connexion est définie correctement.
<?php
// Configuration de la connexion de la base de données
$host = 'localhost';
$user = 'dbuser';
$password = 'dbpassword';
$database = 'testdb';
// créer mysqli Objet
$mysqli = new mysqli($host, $user, $password, $database);
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
// Définissez le jeu de caractères sur utf8mb4(Support recommandé chinois et Emoji)
if (!$mysqli->set_charset('utf8mb4')) {
die('Ensemble de caractères de réglage d'erreur: ' . $mysqli->error);
}
// utiliser get_charset Vérifiez le jeu de caractères actuel
$charset_info = $mysqli->get_charset();
echo "Jeu de caractères actuel: " . $charset_info->charset . "<br>";
echo "Description du jeu de caractères: " . $charset_info->comment . "<br>";
echo "Répertoire de jeu de caractères: " . $charset_info->dir . "<br>";
echo "Longueur d'octet maximale: " . $charset_info->max_length . "<br>";
// Tester Insérer des données chinoises
$sql = "INSERT INTO test_table (content) VALUES ('Tester les caractères chinois')";
if ($mysqli->query($sql)) {
echo "Données chinoises insérées avec succès。<br>";
} else {
echo "L'insertion a échoué: " . $mysqli->error . "<br>";
}
// Tester les données de lecture de la base de données
$result = $mysqli->query("SELECT content FROM test_table ORDER BY id DESC LIMIT 1");
if ($result) {
$row = $result->fetch_assoc();
echo "Lire le contenu: " . $row['content'] . "<br>";
} else {
echo "La requête a échoué: " . $mysqli->error . "<br>";
}
// Fermer la connexion
$mysqli->close();
?>
Le jeu de caractères de table et de champ de base de données doit être cohérent <br> Assurez-vous que le jeu de caractères de votre table et de vos champs est également UTF8MB4 , vous pouvez utiliser SQL comme suit:
SHOW CREATE TABLE test_table;
Sinon, vous pouvez passer à un jeu de caractères cohérent via la table alter .
Codage de la page de test <br> Assurez-vous que votre page PHP elle-même est enregistrée avec le codage UTF-8 et que le type de contenu correct est déclaré dans l'en-tête de réponse HTTP:
header('Content-Type: text/html; charset=utf-8');
Utilisez MySqli_Report pour faciliter le débogage <br> La fonction de rapport MySQLI peut être activée pendant le développement pour faciliter la capture d'erreurs cachées:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);