Je viens de passer ma base de données ainsi que mon site en UFT-8. Tout fonctionne très bien, sauf le contenu de ma base données : les caractères spéciaux laissent place à des �.
J'ai essayé plusieurs techniques différentes pour palier à ce problème tels que mysql_set_charset("UTF8"); (je n'utilise pas PDO), mais sans succès.
Voici un exemple de table qui se trouve dans la BDD :
CREATE TABLE IF NOT EXISTS `creations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`url` varchar(63) NOT NULL,
`etat` varchar(21) NOT NULL,
`contenu` text NOT NULL,
`debut` bigint(20) NOT NULL,
`fin` bigint(20) NOT NULL,
`nbr_img` varchar(1) NOT NULL,
`tags` text NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `creations` (`id`, `nom`, `url`, `etat`, `contenu`, `debut`, `fin`, `nbr_img`, `tags`) VALUES
(1, 'OpenSearch LinkPush', '/LinkPush', 'fini', 'Cet OpenSearch vous permet d''envoyer directement un lien depuis votre ordinateur (via la barre de recherche de votre navigateur) à votre téléphone Android. Vous devez d''abord installer l''application <a href="http://linkpush.appspot.com/">LinkPush</a> sur votre mobile avant de pouvoir l''utiliser.', 1279226607, 1279227104, '0', 'OpenSearch, Android, LinkPush');
Ta page est bien en utf-8 ? Pour vérifier ouvre ta page avec notepadd++ (par exemple) et va dans le menu "encodage".
Il te faut aussi le <meta charset="utf-8" /> dans ton <head>
De plus, as-tu bien mit tes champs (dans ta table) en utf-8 également ?
Développeur Web Freelance. Spécialiste Symfony et Laravel.
Bonjour,
Tes chaînes de caractères dans ta base de données sont encodées en ISO-8859-1 (présence de �).
Essayes de mettre un utf8_encode lors de l'affichage du contenu issu de ta base de données.
Si cela fonctionne, applique cette fonction à toutes les données de ta base de données.
Bonjour,
Tes chaînes de caractères dans ta base de données sont encodées en ISO-8859-1 (présence de �).
Essayes de mettre un utf8_encode lors de l'affichage du contenu issu de ta base de données.
Si cela fonctionne, applique cette fonction à toutes les données de ta base de données.
... Si tu pars sur de bonnes bases niveau encodage (page, bdd, balise meta, etc...), aucune raison d'utiliser ces fonctions normalement.
Développeur Web Freelance. Spécialiste Symfony et Laravel.
C'est pas sa BDD à priorie puisqu'il a une seule page qui a un problème d'encodage, il a juste pas encoder cette page en UTF8, ou alors la table qui gère ça n'a pas eu d'encodage en UTF8
Je n'ai pas encore de page d'édition. J'ai édité le contenu directement dans PMA, mais ça n'a rien changé. J'ai même copié les accents depuis une page encodée en UFT-8, toujours sans résultat.
Sauf que tu dois l'avoir (à l'insertion comme à la sélection)
Ça ne corrigera pas les anciennes données (mais il y a une procédure spécifique pour ça si tout le contenu actuel est touché en passant temporairement par un type binaire (blob) pour ensuite corriger le jeu sans reconversion)
Ça dépend si tu utilises des fonctions incompatibles côté PHP pour traitement avant l'insertion ou entre le select et l'affichage
PS : si t'as besoin de stripslashes, t'as un problème (double échappement à l'insertion ?)
PPS : t'as une injection
Je viens de tester en passant tout en blob, puis retour à la normal. Cela n'a pas fonctionné.
En l’occurrence, étant donné que je n'ai pas encore de page d'administration, je n'utilises aucunes fonctions à l'insertion, mais comme on peut le voir plus haut, j'utilise nl2br (pour les retour à la ligne) et stripslashes (je ne sais plus pourquoi ; question de sécurité à l'insertion ?!) lors de l'affichage.
Tu dis que tu l'as testé mais il n'est pas dans le code que tu montres. Si ta configuration par défaut de MySQL est sur le jeu latin1 alors que tu lui envoies de l'UTF-8, pour une colonne en UTF-8, il va te reconvertir ça n'importe comment (UTF-8 "encodé deux fois" donc c'est faux). Inversement, au SELECT, il va te reconvertir cet UTF-8 complètement foireux en CP1252.
Citation : maxi-mang
Je vais tester en passant tout en blob, puis retour à la normal.
Non, c'est pour corriger le jeu (si besoin). Données latin1 déclarées UTF-8 => blob => change le jeu pour latin1 (le jeu réel, il n'y a pas reconversion) => rechange le jeu pour UTF-8 et tout devrait être bon (les données sont reconverties de latin1/CP1252 en UTF-8 correctement).
Citation : maxi-mang
j'utilise nl2br (pour les retour à la ligne) et stripslashesc (je ne sais plus pourquoi ; question de sécurité à l'insertion ?!) lors de l'affichage.
nl2br ne pose pas de problème. stripslashes, en principe, n'a rien à faire là.
Tu as raison, j'ai ajouté le mysql_set_charset('utf8'); dans haut.php, mais la connexion à la BDD s'effectue directement depuis les deux pages concernées par le problème (new.php et crea.php) et je n'ai pas ajouté cette ligne dans ces fichiers.
Désolé pour le désagrément (j'ai commencé à me poser des questions quand les caractères spéciaux s'affichaient enfin correctement ici mais pas là) !
Merci à tout ceux qui m'ont aidé !
PS : J'ai viré stripslashes. Où se trouve l'injection (ça ne m'étonne même pas d'en avoir une) ?
Problème encodage UTF-8 base de données MySQL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Développeur Web Freelance. Spécialiste Symfony et Laravel.
Développeur Web Freelance. Spécialiste Symfony et Laravel.
Développeur Web Freelance. Spécialiste Symfony et Laravel.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli