theprogrammeur Posté 17 Septembre 2007 Posté 17 Septembre 2007 Bonjour Mon site est encodé en UTF-8 et le problème est que, lorsqu'on poste un nouveau message dans le livre d'or, tous les accents sont remplacés par des trucs comme "A@". Pourtant, juste après la connection à la BDD, j'ai mis cette ligne: mysql_query("SET NAMES UTF8"); D'où peut provenir le problème? Merci d'avance.
binarygirl Posté 17 Septembre 2007 Posté 17 Septembre 2007 Faites-vous l'appel à "SET NAMES UTF8" avant d'insérer les données ET avant de les récupérer par SELECT ?
theprogrammeur Posté 18 Septembre 2007 Auteur Posté 18 Septembre 2007 J'ai utilisé SET NAMES juste après la connection à la BDD, juste avant l'insertion d'un nouveau message dans la BDD et juste avant la récupération des messages. Seulement, les caractères sont mal encodés dans la BDD (j'ai été le voir dans PHPMyAdmin) et lorsque je les modifie avec la partie admin en remplaçant les caractères "A©" par les bons caractères (comme é, è, î), il n'y a plus de problème. Je ne peux quand même pas modifier manuellement tous les messages postés, comment régler ce problème?
binarygirl Posté 18 Septembre 2007 Posté 18 Septembre 2007 Vous devez avoir au moins mySQL 4.1... est-ce le cas ? Et bien sûr définir les tables avec le charset UTF-8 (par défaut ce serait sans doute latin1_swedish juste pour le jeu de caractères occidental)
theprogrammeur Posté 19 Septembre 2007 Auteur Posté 19 Septembre 2007 J'ai MySQL 5.0.45 -Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) -Interclassement pour la connexion: utf8_unicode_ci Dans la BDD: -Interclassement, utf8_general_ci Faut-il modifier quelque chose???
binarygirl Posté 19 Septembre 2007 Posté 19 Septembre 2007 OK et les champs des tables concernés sont-ils bien définis en unicode_utf8_ci ?
theprogrammeur Posté 20 Septembre 2007 Auteur Posté 20 Septembre 2007 Les champs des tables sont en utf8_general_ci Il y a une différence entre utf8_unicode_ci et utf8_general_ci???
binarygirl Posté 20 Septembre 2007 Posté 20 Septembre 2007 Je ne sais pas vous dire comme ça mais moi j'utilise toujours utf8_unicode_ci
Thomas.WS Posté 21 Septembre 2007 Posté 21 Septembre 2007 Oui, fais gaffe à ta déclaration dans ton entête de page
theprogrammeur Posté 21 Septembre 2007 Auteur Posté 21 Septembre 2007 Toutes les pages de mon site sont en UTF-8, encodées grâce à la fonction utf8_encode de PHP.
binarygirl Posté 21 Septembre 2007 Posté 21 Septembre 2007 (modifié) Toutes les pages de mon site sont en UTF-8, encodées grâce à la fonction utf8_encode de PHP. Vous avez ceci dans votre section <head> ? <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Modifié 21 Septembre 2007 par binarygirl
theprogrammeur Posté 22 Septembre 2007 Auteur Posté 22 Septembre 2007 En effet, j'ai mis cette balise: <meta http-equiv="content-type" content="text/html; charset=utf-8" / De plus, dans toutes les pages j'ai mis ceci: header('Content-Type: text/html; charset=utf-8'); Mais je vous rappelle que toutes les pages fonctionnnent bien, c'est juste quand un visiteur poste un nouveau message dans le livre d'or qu'il y a des erreurs dans les caractères accentués. Et lorsque je les corrige via la zone d'admin, il n'y a plus de plroblèmes. C'est donc lors de l'encodage, du textarea du livre d'or jusqu'à la BDD qu'il y a un problème. Avez-vous besoin du code du livre d'or???
Anonymus Posté 22 Septembre 2007 Posté 22 Septembre 2007 Oui, si possible au niveau de l'insert dans la base de données, voire du début de réception des données jusqu'à l'insert.
theprogrammeur Posté 22 Septembre 2007 Auteur Posté 22 Septembre 2007 Voici le code du livre d'or: $connection = mysql_connect("localhost", "root", "");mysql_select_db("data_base");mysql_query("SET NAMES UTF8");//Si message envoyéif (isset($_POST['pseudo']) AND isset($_POST['message']) AND isset($_POST['verif_code']) AND !Empty($_POST['verif_code'])){//Pour code anti-robot (captcha) if($_POST['verif_code']==$_SESSION['aleat_nbr']) { $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // sécurité $message = htmlentities($_POST['message'], ENT_QUOTES); // aussi pour le message $message = nl2br($message); //\n --> <br /> /*TRANSFORMATION DU BBCODE-----------------------------------------------------------------*/$message = str_replace(':bad:','', $message);$message = str_replace(':sourire:', '', $message);$message = str_replace('', '', $message);$message = str_replace(':mort:', '', $message);$message = str_replace(':pfff:', '', $message);$message = str_replace(':sourire2:', '', $message);$message = str_replace(':fun:', '', $message);$message = str_replace(':euh:', '', $message);$message = str_replace('', '', $message);$message = str_replace(':lunettes:', '', $message);$message = str_replace(':pirate:', '', $message);//Mise en forme du texte//gras$message = preg_replace('`\[gras\](.+)\[/gras\]`isU', '[b]$1[/b]', $message);//italique$message = preg_replace('`\[italic\](.+)\[/italic\]`isU', '[i]$1[/i]', $message);//souligné$message = preg_replace('`\[souligne\](.+)\[/souligne\]`isU', '[u]$1[/u]', $message); // Enregistrementmysql_query("SET NAMES UTF8"); mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')"); } else {//Si mauvais code echo'Votre code de confirmation n\'est pas bon ! Merci de réessayer. }} Ca vous aide???
theprogrammeur Posté 28 Septembre 2007 Auteur Posté 28 Septembre 2007 Le problème s'est réglé de lui même. J'ai retapé tout le code du livre d'or dans un nouveau fichier et tout a été réglé (pourtant je n'ai rien changé). Encore un mystère de l'informatique.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant