Votre problème est lié à l'encodage de votre jeu de caractères. Il est important que votre intégralité code a le même jeu de caractères pour éviter les problèmes d'affichage incorrect des caractères.
Il y a pas mal de paramètres qui doivent être correctement définis et je recommande fortement UTF-8, car il contient la plupart des lettres dont vous auriez besoin (scandinave, grec, arabe, russe, etc.).
Voici une petite liste de choses qui doivent être définies pour un jeu de caractères spécifique.
En-têtes
-
Définition du jeu de caractères dans les en-têtes HTML et PHP sur UTF-8
-
PHP :
header('Content-Type: text/html; charset=utf-8');
(Les en-têtes PHP doivent être placés avant any sortie (écho, espace, HTML) !)
-
HTML :
<meta charset=utf-8" />
(Les en-têtes HTML sont placés dans le
<head>
/</head>
balise)
-
Connexion
-
Vous devez également spécifier le jeu de caractères dans la connexion elle-même . Pour votre exemple de PDO, c'est fait comme ça
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Notez le
charset=utf8
-attribut. D'autres API MySQL ont différentes manières de procéder si vous utilisez autre chose à l'avenir.
Base de données
-
Votre base de données et ses tables doivent être définies sur UTF-8. Notez que le jeu de caractères n'est pas identique à la collation. Je vois que vous avez déjà défini votre classement sur UTF-8, donc c'est bien, mais faites de même pour toute la base de données et toutes les tables.
Vous pouvez le faire en exécutant les requêtes ci-dessous une fois pour chaque base de données et tables (par exemple dans phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Notez que toutes les données déjà stockées dans la base de données ne verront pas automatiquement leur jeu de caractères cassé corrigé. Il est donc important que vous le fassiez avant d'insérer des données ou que vous les réinsériez après avoir défini le jeu de caractères.
spécification php.ini
-
Dans votre
php.ini
fichier, vous devez spécifier le jeu de caractères par défaut pour votre plate-forme, comme cecidefault_charset = "utf-8";
Encodage de fichier
- Il est également important que le
.php
le fichier lui-même est encodé en UTF-8. Si vous utilisez Notepad++ pour écrire votre code, cela peut être fait dans le menu déroulant "Format" de la barre des tâches.
Émojis
- Dans MySQL (à la fois dans la table, la base de données et l'objet de connexion), vous devrez spécifier le
utf8mb4
jeu de caractères, par opposition àutf8
normal , si vous souhaitez travailler avec des emojis.
Je ne connais pas grand-chose à Java, mais si vous pouvez également définir des attributs sur UTF-8, faites-le. Essentiellement, tout ce qui peut être défini sur un jeu de caractères spécifique doit être défini sur le même.
Si vous suivez tous les conseils ci-dessus, il y a de fortes chances que votre problème soit résolu. Sinon, vous pouvez consulter ce message StackOverflow : UTF-8 d'un bout à l'autre .