sparh Posté 21 Août 2008 Posté 21 Août 2008 Bonjour, je cherche à passer mon site en utf8 et j'ai des petits problème. Voici comment j'ai procédé: 1- changement de la balise meta chartset sur toutes les pages 2- modification de la base de donnée sql pour tout mettre en utf8 Pour le test j'ai crée une page avec un formulaire qui envoi des données dans la base, les récupère et les affiche. Donc je rempli le formulaire, j'envoi et je regarde: Pas de problème d'encodage pour l'affichage en ligne sur ma page. Par contre quand je vais dans PHPmyadmin il y a des problèmes d'encodage (pour lés é è etc...) Quelqu'un aurait-il une idée d'où peux provenir ce problème ?
crocxx Posté 21 Août 2008 Posté 21 Août 2008 (modifié) Bonjour, J'ai écrit il y a quelques temps un petit article sur la réalisation de site web avec l'utf-8 qui peu peu être t'être utile. Modifié 21 Août 2008 par crocxx
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 Salut et merci mais j'ai lu ton article mais ça ne m'avance pas trop! Un exemple: quand j'entre: "Jeux vidéos" dans mon formulaire c'est "Jeux vidéos" qui est enregistré dans la base de donnée! Par contre à l'affichage j'ai bien Jeux vidéos!! Une idée ?
crocxx Posté 21 Août 2008 Posté 21 Août 2008 C'est phpmyadmin qui faut ouvrir en utf-8 Généralement tu a la choix de l'encodage au démarrage de phpmyadmin, mais si tu est en mutualiser et que ton hébergeur ne te le propose pas sa avec ton phpmyadmin tu peu forcer l'affichage en utf-8 dans firefox
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 (modifié) pfiuu, c'est sympa de m'aider. Franchement ces histoires d'encodage ça me fais ch... et surtout j'y comprends rien mais alors rien du tout! M'enfin faut bien y passer. Je suis en mutu chez OVH (720Plan). A priori j'ouvre bien Phpmyadmin en utf8 (lors de la connexion je précise utf8). Ma base est bien en utf8 et chaque champs est aussi en utf8! J'ai fais un autre test: avec mon formulaire j'enregistre le mot: Vidéos Je vais voir dans la bdd et je trouve Vidéos !!! Je fais une requête sur ce champs: $sql = "SELECT nom FROM `categorie` WHERE nom = 'Vidéos'"; Aucun résultat! $sql = "SELECT nom FROM `categorie` WHERE nom = 'Vidéos'"; aucun résultat non plus Par contre si je change Vidéos par Vidéos directement dans la base de donnée via phpmyadmin et que je refais cette requête: $sql = "SELECT nom FROM `categorie` WHERE nom = 'Vidéos'"; J'ai bien un résultat! Bref help please je suis complètement dépassé! Modifié 21 Août 2008 par sparh
Dan Posté 21 Août 2008 Posté 21 Août 2008 Si tu as "Jeux vidéos" dans phpMyAdmin, c'est que la base contient bien les caractères en UTF-8. Il suffit de forcer l'affichage en UTF-8 pour phpMyAmin...
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 (modifié) Merci Dan mais comment ce fais t'il que ma rquête: $sql = "SELECT nom FROM `categorie` WHERE nom = 'Vidéos'"; ne donne rien ? Même si ça m'énerve j'aimerai bien comprendre. Edit --> J'ai fais un autre test: avec mon formulaire j'enregistre le mot: Vidéos Je vais voir dans la bdd et je trouve Vidéos !!! A l'affichage sur ma page web j'ai bien Vidéos Je vais dans phphmyadmin et je remplace Vidéos par Vidéos. A l'affichage sur mon site j'ai maintenant: Vid�os ?? Voilà je suis complètement perdu Modifié 21 Août 2008 par sparh
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 J'ai testé l'entête de ma page pour voir, voici le résultat: HTTP/1.0 200 OK Date: Thu, 21 Aug 2008 16:47:35 GMT Server: Apache Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache X-Powered-By: PHP/5.2.6 Set-Cookie: PHPSESSID=24c08d3b6c55c648510c034c75cdd8e9; path=/ Connection: close Content-Type: text/html Content-Encoding: gzip Content-Length: 3141 Je comprends pas pourquoi il ne me sort pas: Content-Encoding: utf8 ? Avez vous une idée? Voici l'entête de mes pages: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/index.dwt.php" codeOutsideHTMLIsLocked="false" --><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Dan Posté 21 Août 2008 Posté 21 Août 2008 Si ton hébergement envoie du contenu compressé, c'est normal
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 Euh, je comprends pas? Sur mon hébergement il n'y a que mes sites! Comment ce fait il que j'ai ce Content-Encoding: gzip ?
Dan Posté 21 Août 2008 Posté 21 Août 2008 Tout simplement parce que ton hébergeur veut économiser la bande passante
sparh Posté 21 Août 2008 Auteur Posté 21 Août 2008 Ok, merci. Je reviens à mon problème: avec mon formulaire j'enregistre le mot: Vidéos Je vais voir dans la bdd et je trouve Vidéos !!! A l'affichage sur ma page web j'ai bien Vidéos Je vais dans phphmyadmin et je remplace Vidéos par Vidéos. A l'affichage sur mon site j'ai maintenant: Vid�os ?? Je ne sais pas d'où vient le problème?
yuston Posté 21 Août 2008 Posté 21 Août 2008 (modifié) Rajoute cette ligne à l'ouverture d'une connexion MySQL et dis moi si ça marche ou pas. mysql_query('SET NAMES \'utf8\''); Sinon pour forcer l'affichage de phpMyAdmin en UTF8, quand tu te connectes, tu as un: Bienvenue à phpMyAdmin VERSION et en bas tu dois choisir Français - French (utf-8) Modifié 21 Août 2008 par yuston
Dudu Posté 22 Août 2008 Posté 22 Août 2008 Salut Une chose que tu ne précises pas: as-tu aussi modifié l'encodage de tes pages ? Quand je dis "modifier l'encodage" je ne parle pas de la balise <meta charset="utf-8"> qui est insuffisante toute seule. Pour modifier l'encodage d'une page, il faut en effet: - ouvrir ton code source dans un éditeur de texte, et choisir l'option qui va convertir ton texte depuis l'ancien encodage (au hasard un iso-8859-x) vers l'UTF-8 - dans le cas d'une page PHP, envoyer l'encodage dans les en-têtes grâce à la fonction header() (ce n'est pas indispensable, mais c'est une précaution à prendre) Tu peux déclarer l'encodage dans les en-têtes grace au fichier .htaccess comme ceci AddDefaultCharset UTF-8 Car effectivement, si tu essaies d'afficher de l'UTF-8 dans une page dont le code source est en ISO 8859-quelquechose, tu prends le risque d'avoir un affichage étrange Et encore une fois, déclarer un encodage dans une balise <meta> n'est pas suffisant. D'ailleurs, en cas de conflit, c'est-à-dire si le serveur envoie un en-tête différent de la meta, c'est l'encodage dicté par le serveur qui prendra le dessus. En fait, il faut partir du principe qu'un encodage dans une balise <meta> n'est utile qu'en local (puisqu'il n'y a pas de serveur).
sparh Posté 22 Août 2008 Auteur Posté 22 Août 2008 (modifié) Déjà merci pour votre aide! Je pense avoir un peu avancé: Alors: oui je force bien l'affichage de ma bas sql en utf8 comme le dit yuston (c'est ce que je fais depuis le début) J'ai aussi ajouté mysql_query('SET NAMES \'utf8\''); lors de ma connexion J'ai aussi ajouté AddDefaultCharset UTF-8 dans mon htaccess Maintenant l'entête renvoyé par mes pages contient bien: Content-Type: text/html; charset=utf-8 Par contre j'ai toujours mes problèmes d'affichage. J'ai refais un test: j'enregistre le mot: Vidéos Je vais voir dans la bdd et je trouve Vidéos (yeah enfin!) A l'affichage sur mon site j'ai maintenant: Vid�os (si j'affiche avec htmlentities) Vidéos (si j'affiche sans htmlentities) ps: quand j'ai converti mes pages hier je n'ai pas juste changé la balise meta, je les ai vraiment convertit Modifié 22 Août 2008 par sparh
sparh Posté 22 Août 2008 Auteur Posté 22 Août 2008 Re, si j'ai bien compris je suis pas loin du but. Le dernier problème et il n'est pas des moindre c'est que PHP travail nativement en ISO. Je n'ai pas accès au php.ini (720 plan ovh). Auriez vous une solution de rechange (htaccess) ?
sparh Posté 22 Août 2008 Auteur Posté 22 Août 2008 ok c'est bon je pense avoir compris, tous mes bug sont réglés, merci à tous. Au passage un tuto qui m'a beaucoup aidé: tutorial sur utf-8 avec php ps: si quelqu'un à une réponse à cette question: Le dernier problème et il n'est pas des moindre c'est que PHP travail nativement en ISO. Je n'ai pas accès au php.ini (720 plan ovh). Auriez vous une solution de rechange (htaccess) ? Pour htmlentities c'est simple: htmlentities($string,ENT_COMPAT,'utf-8')
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant