Aller au contenu

Problème d'encodage de iso à utf8


sparh

Sujets conseillés

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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"/>

Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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é par yuston
Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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) ?

Lien vers le commentaire
Partager sur d’autres sites

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')

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...