Dépannage MySQL et PHP : caractères cyrilliques en UTF-8 [Dupliquer]
De nombreux développeurs sont confrontés à des défis lors de la gestion des caractères cyrilliques dans les bases de données MySQL à l'aide PHP. Ce problème provient généralement de conflits d'encodage entre la base de données, le code PHP et les jeux de caractères.
Pour résoudre ce problème, une attention méticuleuse doit être accordée à la garantie que l'UTF-8 est utilisé de manière cohérente tout au long du pipeline d'application.
Considérations cruciales :
-
Fichier PHP Encodage : Assurez-vous que votre fichier PHP est enregistré en UTF-8 sans BOM (Byte Order Mark). Vérifiez cela dans les paramètres d'encodage de fichier de votre éditeur.
-
En-tête HTML et PHP : Définissez l'en-tête dans les documents HTML et PHP pour spécifier l'encodage UTF-8 :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
...
</head>
<body>
...
</body>
</html>
<?php
// At the top of your PHP file, before any output:
header('Content-Type: text/html; charset=utf-8');
?>
-
Paramètres de base de données et de table : Configurez votre base de données MySQL et vos tables individuelles pour utilisez le jeu de caractères UTF-8 avec le classement utf8_general_ci ou utf8_unicode_ci :
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
mysqli_* Configuration de la connexion : Définissez le jeu de caractères de connexion sur UTF-8 après connection :
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
?>
-
Encodage JSON : Lorsque vous utilisez json_encode(), pensez à appliquer l'indicateur JSON_UNESCAPED_UNICODE pour empêcher la conversion hexadécimale des caractères spéciaux.
-
Conscience des fonctions multi-octets : Reconnaissez que les fonctions standard telles que strtolower() ne peut pas gérer les caractères multi-octets. Utilisez des fonctions spécifiques à plusieurs octets comme mb_strtolower().
Remarques supplémentaires :
- Distinguer UTF-8 avec un tiret (-) et sans (-). Ils ne sont pas interchangeables. HTML et PHP utilisent UTF-8, tandis que MySQL préfère utf8.
- Dans MySQL, le jeu de caractères et le classement sont distincts. Définissez les deux sur utf8 et le classement de préférence sur utf8_general_ci ou utf8_unicode_ci.
- Pour gérer les emojis, MySQL nécessite le jeu de caractères utf8mb4 à la fois dans la base de données et dans la connexion. HTML et PHP utiliseront UTF-8.
Configuration pour mysql_* et PDO :
mysql_set_charset('utf8');
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn