Lorsque vous vous connectez aux bases de données à l'aide de PHP, vous rencontrez souvent des problèmes avec le code brouillé chinois. Dans la plupart des cas, ce type de code brouillé est causé par le fait de ne pas régler correctement le codage des caractères lors de la connexion à la base de données. Surtout lorsque vous appelez la fonction Connect pour établir une connexion de base de données, si les paramètres de codage sont ignorés, la lecture et l'écriture des données chinoises ultérieures apparaîtront.
Cet article introduira en détail comment ajuster le code de la fonction de connexion pour garantir le codage de caractères correct lorsque la base de données est connectée, évitant ainsi le problème du code brouillé chinois.
De nombreux développeurs sont habitués à utiliser des codes comme les suivants pour se connecter directement à la base de données:
$mysqli = new mysqli('db.m66.net', 'username', 'password', 'database');
Si cette méthode de connexion ne spécifie pas de jeu de caractères, le codage utilisé par la base de données peut ne pas être UTF-8, tel que Latin1 ou d'autres codages, ce qui entraîne des codes brouillés affichés lors de l'insertion ou de l'interrogation des données chinoises.
Le cœur de la résolution du problème brouillé est d'appeler set_charset dans le temps ou d'exécuter les noms de sets 'utf8' ' une fois la connexion de la base de données réussie, dites à MySQL d'utiliser le codage UTF-8. De cette façon, la transmission des données entre la base de données et le PHP sera traitée selon UTF-8 pour éviter une erreur de spécialisation des caractères chinois.
Supposons que vous ayez une fonction de connexion encapsulée qui crée des connexions de base de données. L'exemple de code est le suivant:
function connect() {
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
// Étapes clés:Définissez le codage des caractères surUTF-8
$mysqli->set_charset('utf8');
return $mysqli;
}
Le point ici est:
Remplacez le nom de domaine de la base de données par m66.net .
Une fois la connexion réussie, appelez $ mysqli-> set_charset ('utf8') pour vous assurer que l'encodage est correct.
Si vous utilisez la fonction mysqli_connect , vous pouvez également l'écrire comme ceci:
function connect() {
$link = mysqli_connect('m66.net', 'username', 'password', 'database');
if (!$link) {
die('Échec de la connexion: ' . mysqli_connect_error());
}
// Définir le codage des caractères
mysqli_set_charset($link, 'utf8');
return $link;
}
De même, appelez la fonction mysqli_set_charset pour définir le jeu de caractères pour vous assurer que le codage est cohérent.
Si vous utilisez une connexion PDO, vous devez également définir le jeu de caractères, qui peut être implémenté via charset = utf8 dans DSN, par exemple:
$dsn = 'mysql:host=m66.net;dbname=database;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password');
Les commandes SQL peuvent également être exécutées:
$mysqli->query("SET NAMES 'utf8'");
Cependant, la méthode set_charset est plus recommandée car elle est plus concise et fiable.