ownowl
2007-06-10 10:33:14 UTC
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>
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>