Hello tout le monde.

Grâce aux recherches, en général je trouve toujours des solutions aux problèmes rencontrés, mais là je sèche, donc je post Smiley smile

Mon interface appelle, une autre page php, via ajax, pour afficher un formulaire.

voici plusieurs infos sur ma méthodologie :
- encodage iso-8859-1 sur mon interface
- encodage forcé en utf-8 sur ma page appelée par ajax.
- Toute ma base, mes tables et mes champs sont en utf-8 (utf8_general_ci)
- Je passe la commande mysql_query("SET NAMES 'utf8'"); à la connexion à la base
- Je récupère mes données postées via un simple $_GET[]
- Je les passe ensuite à la fonction mysql_real_escape_string avant l'insertion en base.

Tout fonctionne nickel avec FF8, mais avec IE8 et Chrome mes caractères spéciaux sont supprimés ainsi que tous les caractères qui les suivent ...

Si je retire la commande mysql_query("SET NAMES 'utf8'"); à la connexion à la base, alors le problème s'inverse en quelque sorte

à savoir que sous IE8 et Chrome, l'enregistrement se fait correctement, mais sous FF8 les caractères spéciaux sont mal enregistrés en base (ex : "é" --> "é")

J'ai essayé pas mal de choses (utf8_decode, html_entity_decode, modif de l'encodage dans phpmyadmin .... la liste serait trop longue ...) mais je n'ai pas trouvé la bonne méthode

bref, j'implore votre aide Smiley smile

Merci d'avance pour vos réponses
Bonjour,

Apparemment ce sont les données récupérées avec $_GET qui ne sont pas toujours dans l'encodage attendu.

Pour éviter d'envoyer des données problématiques lorsque tu fais ta requête HTTP GET qui soumet les données du formulaire (avec chargement de page ou en Ajax), ce serait bien de travailler en UTF-8 de bout en bout. Et donc d'éviter d'avoir certaines pages en UTF-8 et d'autres en ISO-8859-1 (c'est un peu tendre le baton pour se faire battre...).

Ça pourrait être intéressant de vérifier:
- L'encodage utilisé par les différents navigateurs pour afficher la page où tu as ton formulaire ("Affichage > Encodage des caractères" dans Firefox, par exemple).
- Les données exactes des requêtes HTTP faites pour les différents navigateurs avec les mêmes données de test.
Modifié par fvsch (11 Jan 2012 - 22:49)
Bonjour,

HTTP ne définit pas en quel codage caractère sont envoyés les données du navigateur au serveur. Le résultat c'est que PHP reçoit une chaîne d'octets opaque et te la transmet telle quelle. En fait il n'est même pas dit que ce soit du "texte".

C'est au navigateur de décider ce qu'il utilisera comme codage caractère. La règle habituelle c'est que les textes sont codés avec le même codage caractère que la page d'origine du formulaire. Si tes pages HTML sont en UTF8, tu reçois de l'UTF8, si tes pages HTML sont en ISO 8850-1, tu reçois en ISO-8859-1.

Si la page d'origine est faite par un tiers, tu l'as dans l'os et tu ne peux pas savoir quel est le codage utilisé. PHP ne te sera d'aucune aide. Google pour ce cas transmet le codage caractère de la page d'origine dans un champ caché du formulaire, justement parce qu'il peut générer cette page dans des codages différents suivant les pays. Au mieux tu peux tenter de repérer des caractères "habituels" comme à ou © pour "deviner" s'il s'agit d'Unicode ou d'ISO.


Que ton formulaire soit envoyé directement par le navigateur ou par Ajax ne devrait pas changer quoi que ce soit mais j'avoue que si ta page html est en iso et ton javascript est en utf, tu cherches les ennuis et il n'est pas très étonnant que tu en trouves.
Visiblement tu tombes sur une façon d'interpréter la chose suivant les navigateurs. Désolé, la solution c'est de corriger tes codages multiples pour en utiliser un seul.


Voilà pour savoir dans quel codage caractère tu reçois tes données dans $_GET.
Ensuite si tu veux les mettre dans une base UTF8 après avoir fait un SET NAMES UTF8, c'est à toi de t'assurer que tes données sont déjà en UTF8, ou faire un utf8_encode() dessus si elles sont en ISO au départ.



Dans tous les cas : fais un choix, utilises le même codage pour ton html, pour enregistrer tes fichiers php dans ton éditeur, pour ta base de données, pour ton set names, pour ton javascript, etc. Si tu fais autrement, tu *vas* avoir des problèmes. Le risque c'est que tu puisses les découvrir trop tard quand tes données seront déjà toutes pourries en base.
Bonjour,

Voilà, j'ai un problème d'enregistrement. J'ai ajouter des nouveaux champs dans un formulaire existant, les champs précédents s'enregistre très bien.

Mais les nouveaux champs, rien à faire, ça ne s'enregistre tout simplement pas. Est-ce qu'il y a un endroit ou il faut définir les champs d'un formulaire à enregistrer? Je n'ai rien vu dans la documentation. J'ai peut-être manqué une étape?

Merci de votre aide.
Modérateur
Bonjour bigboss,

Veuillez créer votre propre sujet et évitez de mettre des liens dans votre signature.

Merci