Bonjour à tous. Voilà une semaine que je me prend la tête avec mon problème d'encodage.
J'ai essayé une fois le menu Format/Encodé en UTF-8 de Notepad++ et depuis, enfin j'ai l'impression que c'est depuis ça, c'est le médier Smiley decu .

Je m'explique.

Je travail en local via wamp, et code avec Notepad++.
J'ai deux pages php, une affichage et une traitement.
J'utilise $.post() de Jquery pour appeler la page traitement qui envoi la requête de mon formulaire présent dans la page affichage.
Lorsque je fais un é dans mon formulaire je me retrouve avec & Atilde; & copy; dans ma base phpmyadmin et à l'affichage j'ai un é (A avec une vague et le c de copyright).

Mes variables passent toutes par $var=htmlentities($var, ENT_QUOTES,'ISO-8859-1'); j'ai bien mis l'encodage <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> au début de ma page affichage et header("Content-Type: text/html; charset=iso-8859-1"); en haut de ma page de traitement.
Toute ma table est en latin1, mes champs aussi.


Test:
Avant tout ce chemilblik, j'avais déjà mis une version précédente en ligne. Et lorsque je la récupére pour la mettre en local, ça fonctionne, donc j'en déduis que ça vient pas de la base de données.
Pour pousser le vis, j'ai copier le code des pages qui merdouille dans les pages récupérés qui fonctionnent, et là ça fonctionne plus.
Donc pour moi, le problème viendrait de la traduction des variables dans le fichier php.
Et sous Notepad++, l'encodage des pages est bien en ANSI.

J'ai fais aussi d'autres tests, notamment celui d'enlever le htmlentities et de mettre un utf8_decode à la place, et là, j'ai un é dans ma base.
Normalement ça devrait être un & e a cute; non???? Smiley ohwell


Si quelqu'un pouvait m'aider, ça serait génial. Là je sais plus où regarder.
Modifié par WyLLoU (23 Dec 2009 - 09:20)
Bonjour à tous, et merci pour vos réponses fortes intéressantes, mais je souhaiterai resté en iso sinon ça va être une galère pour mes données déjà saisies en iso.

Heyoan a écrit :

plus généralement il faudrait lire Comment bien déclarer l'encodage des caractères d'une page.

A noter qu'il faudra également définir l'encodage de la connexion (juste après la sélection de la base) :
mysql_query('SET NAMES UTF8');


J'ai déjà lu le tuto. J'ai bien paramètre tous ce qu'il fallait. Et puis il parle du paramètrage du navigateur, rien en ce qui concerne la BDD.
J'ai testé mysql_query("SET NAMES latin1");
Mais ça ne fait rien.

D'ailleurs quelqu'un pourrait me dire pourquoi avant ça fonctionnait sans que j'ai besoin de définir quoi que se soit de paramètres et que maintenant ça merde???

C'est bizarre.

Je suis perdu là.
Modifié par WyLLoU (21 Dec 2009 - 09:21)
Re',

j'avais effectivement lu un peu vite ton premier post. Smiley cligne

WyLLoU a écrit :
J'ai essayé une fois le menu Format/Encodé en UTF-8 de Notepad++ et depuis, enfin j'ai l'impression que c'est depuis ça, c'est le médier
Ben si tu as remis ANSI et réenregistré les pages en question il n'y a pas de raison.

WyLLoU a écrit :
à l'affichage j'ai un é (A avec une vague et le c de copyright).
Ce qui signifie que tu affiches de l'utf8 en le déclarant en latin1.

WyLLoU a écrit :
Mes variables passent toutes par $var=htmlentities($var, ENT_QUOTES,'ISO-8859-1');
Ouille ! Quel est l'intérêt de faire une chose (horreur) pareille ? Lorsque l'encodage est le même partout il suffit d'utiliser mysql_real_escape_string pour ce qui est des requêtes avec la BDD et htmlspecialchars pour l'affichage des pages.


WyLLoU a écrit :
Avant tout ce chemilblik, j'avais déjà mis une version précédente en ligne. Et lorsque je la récupére pour la mettre en local, ça fonctionne, donc j'en déduis que ça vient pas de la base de données.
A priori oui... en même temps ce serait une bonne idée de se débarrasser des entités html inutiles (par exemple en faisant une boucle à base de html_entity_decode).


WyLLoU a écrit :
J'ai fais aussi d'autres tests, notamment celui d'enlever le htmlentities et de mettre un utf8_decode à la place, et là, j'ai un é dans ma base.
Normalement ça devrait être un & e a cute; non?
Ben non puisque c'est htmlentities qui convertit les accents en entités html... ce qui n'a aucun intérêt.


Quoi qu'il en soit je soupçonne effectivement qu'une de tes pages a été enregistrée en utf8 : tu pourrais essayer de les réenregistrer pour forcer l'encodage ANSI.
Heyoan, tout d'abord, merci pour ta réponse.

Donc, j'ai vérifié, toutes mes pages sont bien enregistrées en ANSI. Peut-être existe-t-il un autre éditeur de code permettant de mieux vérifier cela.

Effectivement, lorsque je vais dans Affichage de Firefox et que je met UTF8, mes données é sont retranscrites en 'é'. Mais je ne recherche pas l'UTF-8 étant donné que j'ai commencé en ISO,et que met données sont en ISO.

Je ne connait pas du tout mysql_real_escape_string , je vais m'y atteler. J'ai déjà utilisé htmlspecialchars, mais j'ai l'impression que ça me convertit en caractère UTF-8.

Je problème qui me chagrine aussi, c'est que maintenant, dès que je crée un nouveau document et bien j'ai le problème. Mais en tapant je me dis que c'est peut être ma page de connexion à la base qui a un souci. Vu que ma connexion se fait via une page include(). Est-ce possible?
Modifié par WyLLoU (21 Dec 2009 - 13:42)
WyLLoU a écrit :
je me dis que c'est peut être ma page de connexion à la base qui a un souci. Vu que ma connexion se fait via une page include(). Est-ce possible?
Si tu parles d'une page qui ne contient que du code php ça ne change rien.

Par contre je viens de réaliser que du parlais de jQuery $.post et le problème pourrait bien venir de là car il me semble que par défaut l'encodage est en utf-8 : as tu bien une ligne définissant que l'encodage doit être en iso ?
Heyoan a écrit :
Si tu parles d'une page qui ne contient que du code php ça ne change rien.

Par contre je viens de réaliser que du parlais de jQuery $.post et le problème pourrait bien venir de là car il me semble que par défaut l'encodage est en utf-8 : as tu bien une ligne définissant que l'encodage doit être en iso ?



Bin tu sais quoi, je me suis posé la même question si ça venait pas de jquery.
Car la version en ligne qui fonctionne n'utilise pas jquery, elle passe par le bouton submit habituelle.
Mais je ne vois pas de quelle ligne tu parles. J'ai mon <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> si c'est ça que tu demande.
Peut être qu'il y a un truc à faire dans le option de la fonction $.POST() de jquery.
Je vais me renseigner.
Heyoan a écrit :
Si tu parles d'une page qui ne contient que du code php ça ne change rien.

Par contre je viens de réaliser que du parlais de jQuery $.post et le problème pourrait bien venir de là car il me semble que par défaut l'encodage est en utf-8 : as tu bien une ligne définissant que l'encodage doit être en iso ?


T'as raison, il y a un souci avec le javascript.
J'ai trouvé ça sur une forum [Clic]
Apparemment je n'ai pas trouvé de paramètre sur le POST. Je continus mes investigations.
Bon voilà, après moult recherches, je confirme que l'ajax envoie ses données en UTF-8.
Je n'ai donc pas trouvé d'autre moyen que de faire un utf8_decode à la réception des variables post, et une htmlentities ensuite pour avoir le fameux "& eacute".
Le htmlspecialchars ne fonctionne pas. Quand je le met tout seul il met un é dans la base et si je précise ent_quotes,'iso8859-1' il me met é aussi.
Je crois que je dois mal l'utilisé, du coup je suis revenu sur htmlentities.

J'ai également lu qu'en mettant header('Content-Type: text/html; charset=iso-8859-1'); au début de la page de traitement php, on devrait pas avoir besoin de faire utf8_decode(), mais moi ça fonctionne pas.

Ma solution n'est pas très catholique, parce qu'au final je résous pas vraiment mon problème, je le détourne. Mais bon. Si quelqu'un sait me dire pourquoi le header ne fonctionne pas ainsi que m'expliquer le htmlspecialchars.

Sinon merci à pour le coup de main.
WyLLoU a écrit :
...et une htmlentities ensuite pour avoir le fameux "& eacute".
Le htmlspecialchars ne fonctionne pas. Quand je le met tout seul il met un é dans la base et si je précise ent_quotes,'iso8859-1' il me met é aussi.
Je crois que je dois mal l'utilisé, du coup je suis revenu sur htmlentities.
Bon alors je me répète : il faut utiliser htmlspecialchars plutôt que htmlentities parce qu'il ne sert à rien de stocker &eacute; quand on peut stocker é ! Smiley smile
Modifié par Heyoan (22 Dec 2009 - 16:32)
Heyoan a écrit :
Bon alors je me répète : il faut utiliser htmlspecialchars plutôt que htmlentities parce qu'il ne sert à rien de stocker &eacute; quand on peut stocker é ! Smiley smile


Ok , mais moi on m'a toujours dit de sécuriser mes variables avec ça. C'est pour ça.
Mais bon, je vais t'écouter, je vais utiliser SpecialChars.

Merci pour toutes tes infos et tes conseils.

Je pense qu'on peut clôturer le sujet.

Merci Smiley cligne
WyLLoU a écrit :
Ok , mais moi on m'a toujours dit de sécuriser mes variables avec ça.
C'est qui "on" ? Un vieux tuto du SDZ ? Smiley langue

Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne
Heyoan a écrit :
C'est qui "on" ? Un vieux tuto du SDZ ? Smiley langue

Oops je suis pisté! Smiley confused

Smiley smile Encore merci!
Modifié par WyLLoU (23 Dec 2009 - 09:20)