|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
bonjour à tous
j'ai un souci l'accent par ajax. je suis dessus depuis plusieurs jours et ca commence à faire bien long. en gros : - j'ai une page php qui comporte un champ html input (dont l'id est test) - pour les tests, je met dans le champ input par exemple le caractère "é" - j'envoi au serveur le contenu de ce champ par un bouton submit et le serveur me trouve la valeur asci 233 ce qui en iso-8859-1 est bien le caractère "é" qui a été envoyé : normal - j'envoi le contenu de ce champ par ajax, et là le serveur me détecte 2 caractères : 195 et 169 : pas mormal j'ai positionné partout ou j'ai pu le charset iso-8859-1, à savoir : - dans la page html, partie php - dans le head de la page html - dans le mode d'encodage de l'objet XMLHttpRequest - dans le php.ini : default_charset = "iso-8859-1" - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 environnement - Xp - apache 2.0.59 - php 5.1.2 le problème est le même quelque soit le navigateur (IE5,6,7 firefox) une idée ? Olivier le code dbtest3.php : <? header('Content-Type: text/html; charset=iso-8859-1'); function print_charset($chaine) { $longueur=strlen($chaine); for($i=0;$i<$longueur;$i++) { $caractere=substr($chaine,$i,1); error_log("code ascii test ".$caractere." ".ord($caractere)); } } print_charset($_POST['test']); error_log('test ' . $_POST['test']); error_log('test àvé accent'); ?> <script type="text/javascript"> <!-- function getXMLHttpRequest(){ var http_request = null; if(window.XMLHttpRequest) {// Firefox et autres http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { // set type accordingly to anticipated content type //http_request.overrideMimeType('text/xml'); http_request.overrideMimeType('text/html'); } } else if(window.ActiveXObject){ // Internet Explorer try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e1) { http_request = null; } } } return http_request; } function go() { var http_request = getXMLHttpRequest(); var txt = document.getElementById('test').value; //var parameters = "test=" + encodeURI(txt); var parameters = "test=" + txt; http_request.onreadystatechange = function() { if (http_request.readyState == 4) { //alert(http_request.responseText); } } http_request.open('POST', "dbtest3.php?nocache=" + Math.random(), true); http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1"); http_request.setRequestHeader("Content-length", parameters.length); http_request.setRequestHeader("Connection", "close"); alert(parameters); http_request.send(parameters); } --> </script> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>test à la con</title> </head> <body> <a href="dbtest3.php">reload</a> <br/> <a href="javascript:void(go())">go</a> <form name="form1" method="post" action="dbtest3.php"> <input name="test" type="text" id="test" maxlength="15" value="" /> <input name="" type="submit" value="Envoyer"> </form> </body> </html> |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Le 10/06/2007 12:33, ownowl a écrit :
> > j'ai un souci l'accent par ajax. je suis dessus depuis plusieurs jours > et ca commence à faire bien long. En effet. > en gros : > - j'ai une page php qui comporte un champ html input (dont l'id est test) > - pour les tests, je met dans le champ input par exemple le caractère "é" > - j'envoi au serveur le contenu de ce champ par un bouton submit et > le serveur me trouve la valeur asci 233 ce qui en iso-8859-1 est bien le > caractère "é" qui a été envoyé : normal Ok. > - j'envoi le contenu de ce champ par ajax, et là le serveur me détecte 2 > caractères : 195 et 169 : pas mormal Il ne s'agit en fait pas de deux caractères, mais d'un seul caractère encodé sur deux octets en UTF-8. http://www.miakinen.net/vrac/charset...an&or=2&pr=233 Codage UTF-8 = C3 A9 = 195 169. > j'ai positionné partout ou j'ai pu le charset iso-8859-1, à savoir : > > - dans la page html, partie php > - dans le head de la page html > - dans le mode d'encodage de l'objet XMLHttpRequest > - dans le php.ini : default_charset = "iso-8859-1" > - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 Ben oui, mais XML est par défaut en UTF-8, et d'après ce que tu décris il semble difficile d'aller contre. Pourquoi ne ferais-tu pas un utf8_decode() en réception, si vraiment tu tiens à ISO-8859-1 ? [ crosspost respecté, mais suivi dans un seul groupe ] |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Le 10/06/2007 12:33, ownowl a écrit :
> > j'ai un souci l'accent par ajax. je suis dessus depuis plusieurs jours > et ca commence à faire bien long. En effet. > en gros : > - j'ai une page php qui comporte un champ html input (dont l'id est test) > - pour les tests, je met dans le champ input par exemple le caractère "é" > - j'envoi au serveur le contenu de ce champ par un bouton submit et > le serveur me trouve la valeur asci 233 ce qui en iso-8859-1 est bien le > caractère "é" qui a été envoyé : normal Ok. > - j'envoi le contenu de ce champ par ajax, et là le serveur me détecte 2 > caractères : 195 et 169 : pas mormal Il ne s'agit en fait pas de deux caractères, mais d'un seul caractère encodé sur deux octets en UTF-8. http://www.miakinen.net/vrac/charset...an&or=2&pr=233 Codage UTF-8 = C3 A9 = 195 169. > j'ai positionné partout ou j'ai pu le charset iso-8859-1, à savoir : > > - dans la page html, partie php > - dans le head de la page html > - dans le mode d'encodage de l'objet XMLHttpRequest > - dans le php.ini : default_charset = "iso-8859-1" > - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 Ben oui, mais XML est par défaut en UTF-8, et d'après ce que tu décris il semble difficile d'aller contre. Pourquoi ne ferais-tu pas un utf8_decode() en réception, si vraiment tu tiens à ISO-8859-1 ? [ crosspost respecté, mais suivi dans un seul groupe ] |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
> Le 10/06/2007 12:33, ownowl a écrit : >> j'ai positionné partout ou j'ai pu le charset iso-8859-1, à savoir : >> >> - dans la page html, partie php >> - dans le head de la page html >> - dans le mode d'encodage de l'objet XMLHttpRequest >> - dans le php.ini : default_charset = "iso-8859-1" >> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 > > Ben oui, mais XML est par défaut en UTF-8, il paraît. > et d'après ce que tu > décris il semble difficile d'aller contre. Je ne comprends pas, il paraîtrait qu'il suffirait d'envoyer les bons en-têtes ? Et là on a un très net commandement php de ces en-têtes me semble-ce. Pourquoi n'est-ce point suivi ? Serait-ce le XMLHttpRequest qui poste en utf-8 ? (au lieu de simplement se cantonner à la réception dans ce charset si omission). Serait-ce le JS du brouteur qui s'obstine au utf-8 alors qu'on lui a indiqué autre chose ? (par exemple mon Safari me cracrabouille en iso-latin ce qui lui a été envoyé en utf-8 si l'envoi n'est pas précédé de la déclaration xhtml de charset utf-8 et ce même si la page hôte est en utf-8) > Pourquoi ne ferais-tu pas > un utf8_decode() en réception, si vraiment tu tiens à ISO-8859-1 ? > > [ crosspost respecté, mais suivi dans un seul groupe ] Bon, je ne saurai pas si cette ficelle lui aura réussi. -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
> Le 10/06/2007 12:33, ownowl a écrit : >> j'ai positionné partout ou j'ai pu le charset iso-8859-1, à savoir : >> >> - dans la page html, partie php >> - dans le head de la page html >> - dans le mode d'encodage de l'objet XMLHttpRequest >> - dans le php.ini : default_charset = "iso-8859-1" >> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 > > Ben oui, mais XML est par défaut en UTF-8, il paraît. > et d'après ce que tu > décris il semble difficile d'aller contre. Je ne comprends pas, il paraîtrait qu'il suffirait d'envoyer les bons en-têtes ? Et là on a un très net commandement php de ces en-têtes me semble-ce. Pourquoi n'est-ce point suivi ? Serait-ce le XMLHttpRequest qui poste en utf-8 ? (au lieu de simplement se cantonner à la réception dans ce charset si omission). Serait-ce le JS du brouteur qui s'obstine au utf-8 alors qu'on lui a indiqué autre chose ? (par exemple mon Safari me cracrabouille en iso-latin ce qui lui a été envoyé en utf-8 si l'envoi n'est pas précédé de la déclaration xhtml de charset utf-8 et ce même si la page hôte est en utf-8) > Pourquoi ne ferais-tu pas > un utf8_decode() en réception, si vraiment tu tiens à ISO-8859-1 ? > > [ crosspost respecté, mais suivi dans un seul groupe ] Bon, je ne saurai pas si cette ficelle lui aura réussi. -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Le 11/06/2007 11:55, ASM a écrit :
>>> >>> - dans la page html, partie php >>> - dans le head de la page html >>> - dans le mode d'encodage de l'objet XMLHttpRequest >>> - dans le php.ini : default_charset = "iso-8859-1" >>> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 >> >> Ben oui, mais XML est par défaut en UTF-8, > > il paraît. > >> et d'après ce que tu >> décris il semble difficile d'aller contre. > > Je ne comprends pas, il paraîtrait qu'il suffirait d'envoyer les bons > en-têtes ? La question est de savoir comment envoyer ces entêtes, non pas du serveur vers le client, mais du client vers le serveur. > Et là on a un très net commandement php de ces en-têtes me semble-ce. > Pourquoi n'est-ce point suivi ? Je suis d'accord pour les quatre qui concernent l'encodage de la page envoyée par le serveur au navigateur, mais ce n'est pas ce qui pose problème ici : >>> - dans la page html, partie php >>> - dans le head de la page html >>> - dans le php.ini : default_charset = "iso-8859-1" >>> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 Éventuellement, la solution pourrait être ici si ce « mode d'encodage » concernait ce qu'envoie le navigateur au serveur, mais je ne connais pas assez l'objet XMLHttpRequest pour savoir ce qu'il en est effectivement : >>> - dans le mode d'encodage de l'objet XMLHttpRequest > Serait-ce le XMLHttpRequest qui poste en utf-8 ? Visiblement, oui. > Serait-ce le JS du brouteur qui s'obstine au utf-8 alors qu'on lui a > indiqué autre chose ? Peut-être, mais ownowl a essayé plusieurs versions d'IE et une de Firefox qui font toutes la même chose. > (par exemple mon Safari me cracrabouille en iso-latin ce qui lui a été > envoyé en utf-8 si l'envoi n'est pas précédé de la déclaration xhtml de > charset utf-8 et ce même si la page hôte est en utf-8) C'est drôle, parce que là c'est l'inverse : le navigateur renvoie de l'UTF-8 alors qu'il a reçu du Latin1. |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Le 11/06/2007 11:55, ASM a écrit :
>>> >>> - dans la page html, partie php >>> - dans le head de la page html >>> - dans le mode d'encodage de l'objet XMLHttpRequest >>> - dans le php.ini : default_charset = "iso-8859-1" >>> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 >> >> Ben oui, mais XML est par défaut en UTF-8, > > il paraît. > >> et d'après ce que tu >> décris il semble difficile d'aller contre. > > Je ne comprends pas, il paraîtrait qu'il suffirait d'envoyer les bons > en-têtes ? La question est de savoir comment envoyer ces entêtes, non pas du serveur vers le client, mais du client vers le serveur. > Et là on a un très net commandement php de ces en-têtes me semble-ce. > Pourquoi n'est-ce point suivi ? Je suis d'accord pour les quatre qui concernent l'encodage de la page envoyée par le serveur au navigateur, mais ce n'est pas ce qui pose problème ici : >>> - dans la page html, partie php >>> - dans le head de la page html >>> - dans le php.ini : default_charset = "iso-8859-1" >>> - dans le httpd.conf d'apache : AddDefaultCharset iso-8859-1 Éventuellement, la solution pourrait être ici si ce « mode d'encodage » concernait ce qu'envoie le navigateur au serveur, mais je ne connais pas assez l'objet XMLHttpRequest pour savoir ce qu'il en est effectivement : >>> - dans le mode d'encodage de l'objet XMLHttpRequest > Serait-ce le XMLHttpRequest qui poste en utf-8 ? Visiblement, oui. > Serait-ce le JS du brouteur qui s'obstine au utf-8 alors qu'on lui a > indiqué autre chose ? Peut-être, mais ownowl a essayé plusieurs versions d'IE et une de Firefox qui font toutes la même chose. > (par exemple mon Safari me cracrabouille en iso-latin ce qui lui a été > envoyé en utf-8 si l'envoi n'est pas précédé de la déclaration xhtml de > charset utf-8 et ce même si la page hôte est en utf-8) C'est drôle, parce que là c'est l'inverse : le navigateur renvoie de l'UTF-8 alors qu'il a reçu du Latin1. |
|
![]() |
| Outils de la discussion | |
|
|