PHP : Problème d'encodage au niveau du passage des variables
nicopulse
Membre
Bonjour à tous,
Je travaille actuellement sur un projet web iPhone (HTML/PHP/SQL/JS/AJAX avec FrameWork WebApp) avec une base Oracle et Apache :P le tout hébergé sous Windows Server 2003. :why?:
Après avoir résolu les erreurs d'encodage des fichiers à l'enregistrement
⇨ encoder en ISO 8859-1 et pas en UTF-8
Utiliser la fonction entête au début des pages php :
⇨ header('Content-Type: text/xml; charset=ISO-8859-1');
Je me heurte maintenant à des problèmes d'encodage au niveau du passage des variables d'un formulaire à une page de traitement (requête POST en AJAX). Je viens de passer une journée entière à essayer de le résoudre en vain.
Exemples :
( é ) coté formulaire devient ( àƒÂ© ) sur la page de traitement
( ‘ ) coté formulaire devient ( \‘ ) coté traitement
Je m'en suis aperçu car lors du traitement j'utilise :
⇨ htmlentities()
⇨ htmlspecialchar()
Ces deux fonctions ne font absolument rien sur les variables que je voudrais traiter.
En effectuant des tests (echo), je me suis aperçu que les variables qui contienne des caractères spéciaux sont directement mal encodé dans le $_POST !
Voici le problème sur un test simple (méthode GET) :
J'en déduis que c'est un problème au niveau du passage des variables !
Et je ne sais pas comment résoudre ce problème. Mais je pense qu'il faut forcer le navigateur (ici Safari) à passer des variables en ISO-8859-1 et non pas en UTF-8 comme il à l'air de le faire.
Et il faut le forcer à deux endroits :
⇨ Passer les requêtes POST en ISO-8859-1 au niveau d'une requête AJAX.
⇨ Passer les requêtes POST en ISO-8859-1 au niveau du problème simple illustré ci-dessus.
Voilà donc si quelqu'un à une idée ou à l'expérience de ce genre d'aventure ! Je suis preneur d'explications !
Merci d'avance !
Je travaille actuellement sur un projet web iPhone (HTML/PHP/SQL/JS/AJAX avec FrameWork WebApp) avec une base Oracle et Apache :P le tout hébergé sous Windows Server 2003. :why?:
Après avoir résolu les erreurs d'encodage des fichiers à l'enregistrement
⇨ encoder en ISO 8859-1 et pas en UTF-8
Utiliser la fonction entête au début des pages php :
⇨ header('Content-Type: text/xml; charset=ISO-8859-1');
Je me heurte maintenant à des problèmes d'encodage au niveau du passage des variables d'un formulaire à une page de traitement (requête POST en AJAX). Je viens de passer une journée entière à essayer de le résoudre en vain.
Exemples :
( é ) coté formulaire devient ( àƒÂ© ) sur la page de traitement
( ‘ ) coté formulaire devient ( \‘ ) coté traitement
Je m'en suis aperçu car lors du traitement j'utilise :
⇨ htmlentities()
⇨ htmlspecialchar()
Ces deux fonctions ne font absolument rien sur les variables que je voudrais traiter.
En effectuant des tests (echo), je me suis aperçu que les variables qui contienne des caractères spéciaux sont directement mal encodé dans le $_POST !
Voici le problème sur un test simple (méthode GET) :
J'en déduis que c'est un problème au niveau du passage des variables !
Et je ne sais pas comment résoudre ce problème. Mais je pense qu'il faut forcer le navigateur (ici Safari) à passer des variables en ISO-8859-1 et non pas en UTF-8 comme il à l'air de le faire.
Et il faut le forcer à deux endroits :
⇨ Passer les requêtes POST en ISO-8859-1 au niveau d'une requête AJAX.
⇨ Passer les requêtes POST en ISO-8859-1 au niveau du problème simple illustré ci-dessus.
Voilà donc si quelqu'un à une idée ou à l'expérience de ce genre d'aventure ! Je suis preneur d'explications !
Merci d'avance !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'entends par là : code de la page et base de données.
Sinon, la page qui affiche ton formulaire est-elle aussi en ISO-8859-1 ?
Cependant, il faut vérifier que Safari autodétecte bien que le contenu à afficher, lui, est bien de l'ISO-Latin-1 (que t'affiche-t-il dans le menu "Présentation -> Encodage de texte" ?).
Le mieux pour vérifier ça est d'encapsuler ton code PHP dans un wrapper HTTP où tu précises dans une balise <meta> le Content-Type avec son encodage (oui, en plus de le préciser en header HTTP avec la méthode header() de PHP)
Pour les soucis \' utilise stripslashes() et ce sera gagné ^^
c'est un truc qui ne devrait Jamais être à On sauf pour raison de compatibilité avec des vieux script php
donc s'il est à on (phpinfo() t'indique l'état de la chose)
pour ce qui est de tes caractères c'est normal ajax se base sur un composant appelé XmlHttpRequest qui comme son nom l'indique est fait pour faire des requêtes Xml en Http il utilise Utf-8 qui est l'encodage préconisé pour le XML
c'est donc normal que tu reçois tes variable encodé en UTF-8
il te suffit de faire un utf8_decode de ta variable pour pouvoir la lire
si un même script peut être appelé par un formulaire en Iso-latin-1 et un appel Ajax en utf-8 lorsque l'appel se fait en ajax tu reçois dans l'entête http une entrée qui t'indique qu'il s'agit de XmlHttpRequest tu peux donc facilement poser une condition pour décoder ou non tes variables
Mais il est très fortement conseillé de faire des scripts différents pour traiter les appel ajax et les appel http classiques même s'il utilisent les mêmes fonction.
A+JYT