PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.javascript > charset et ajax (probleme d'accent)
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
charset et ajax (probleme d'accent)

Réponse
 
LinkBack Outils de la discussion
Vieux 10/06/2007, 11h33   #1
ownowl
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut charset et ajax (probleme d'accent)

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>
  Réponse avec citation
Vieux 10/06/2007, 19h36   #2
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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 ]
  Réponse avec citation
Vieux 10/06/2007, 19h36   #3
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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 ]
  Réponse avec citation
Vieux 11/06/2007, 10h55   #4
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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é
  Réponse avec citation
Vieux 11/06/2007, 10h55   #5
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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é
  Réponse avec citation
Vieux 11/06/2007, 11h19   #6
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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.
  Réponse avec citation
Vieux 11/06/2007, 11h19   #7
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: charset et ajax (probleme d'accent)

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.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 16h21.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,18528 seconds with 15 queries