Problème avec les accents et AJAX [Résolu]

Signaler
Messages postés
22
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
19 juillet 2006
-
Messages postés
2
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
6 mai 2009
-
Bonjour,

J'i toujours un problème en AJAX lors de la transmission de données avec des accents,quelqu'un a t-il une idée?

Merci

10 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut, l'utf-8 c'est assez chiant vu qu'il faut toujours encoder les caractères...
Bon mais c'était pour dire à ceux qui cherchent que spécifier la norme de caractères sur la page APPELEE par Ajax règle le problème des accents, même si on n'est pas en utf8.

<?php
header('Content-Type: text/html; charset=ISO-8859-15');
?>

pour php
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Salut,
il faut que tes pages soient encodées en utf-8

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Messages postés
22
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
19 juillet 2006

salut,

Je ne comprends pas tres bien,
Toutes les pages s'affichent correctement alors qu'elles sont codées en iso-8859-1.
J'ai juste un problème lors de l'appel AJAX dont le code est le suivant :


<hr />
var xhr = null;
function getXhr()
{
 if(window.XMLHttpRequest) // Firefox et autres
    xhr = new XMLHttpRequest();
 else if(window.ActiveXObject){ // Internet Explorer
    try {
    xhr = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
   }
 }
 else { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    xhr = false;
 }
}function rappatrie_messages()
{
 getXhr()
 // On défini ce qu'on va faire quand on aura la réponse
 xhr.onreadystatechange = function(){
  // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  if (xhr.readyState==1)
   {document.getElementById("Layer1").style.display='';
    document.getElementById("bouton_recherche").disabled='disabled';}
  if (xhr.readyState==2)
   {document.getElementById("Layer1").style.display='';}
  if (xhr.readyState==3)
   {document.getElementById("Layer1").style.display='';}  if(xhr.readyState 4 && xhr.status 200){
   document.getElementById("Layer1").style.display='none';
   document.getElementById("ligne_reponses").innerHTML=xhr.responseText;
   document.getElementById("bouton_recherche").disabled='';
  }
 }
 xhr.open("POST","maincourante_ajax.asp",true);
 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=iso-8859-1");  
 var data="ref=&debut="+document.getElementById("debut").value+"&fin="+document.getElementById("fin").value+"&mot_cle="+document.getElementById("mot_cle").value+"&table=maincourante_maintenance_tbl";
 xhr.send(data);
 paramatre=null;
}

<hr />La page que j'appelle a le code suivant :
<!-- #include file="connexion.txt" -->
<!-- #include file="fonctions.txt" -->
<!-- #include virtual="/adovbs.inc" -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<%
response.write("\")
If Isdate(request.form(\"debut\"))=false or Isdate(request.form(\"fin\"))=False Then
 response.write(\"----
V&eacute;rifiez la coh&eacute;rence des dates de recherche, \")
else
 'création de la requête
 sql_main=\"SELECT * FROM \"&request.form(\"table\")&\", personnel_tbl, service_tbl WHERE id_auteur=[id personnel] AND [is service]=[service] AND reponse=False\"
 If request.Form(\"mot_cle\") <> \"\" Then
  mot_cle=replace(request.Form(\"mot_cle\"),\" \",\"%\")
  sql_main=sql_main & \" AND message LIKE '%\" & mot_cle & \"%' \"
 End if
 If request.Form(\"debut\")<>\"\" and request.Form(\"fin\")<>\"\" then
  sql_main = sql_main & \" AND Date Between #\" & conv_date(request.Form(\"debut\")) & \"# AND #\" & Conv_Date(request.Form(\"fin\")) & \"# \"
 End if
 'Fin de la requête.
 sql_main=sql_main & \" Order By VIM, Date DESC\"
 SET enr_main = connexion.Execute(sql_main)
 If enr_main.eof Then
  Response.write(\"----
Aucune entr&eacute;e recens&eacute;e pour les crit&egrave;res renseign&eacute;s, \")
 else
  i=0
  Response.write(\"
xx entr&eacute;es recens&eacute;es
\")
  Do while enr_main.EOF =false
  Response.write(\"----
\")
    Response.write(\"")
   Response.write("<table width= '100%'  border='0' align='left' cellpadding='2' cellspacing='0'>")
     Response.write("----
")
    Response.write(", \")
     response.write(\"
\"&enr_main(\"date\")&\"
\")
     response.write(\"
\"&replace(replace(enr_main(\"NOM\"),\"é\",\"&eacute;\"),\"è\",\"&eacute\")&\", \"&replace(replace(enr_main(\"Prénom\"),\"é\",\"&eacute\"),\"è\",\"&eacute;\")&\"
\")
     If enr_main(\"VIM\") =true Then
      response.write(\"

\")
     End If
    Response.write(\"</td>\")
    Response.write(\"")
     Response.write("<table width='100%'  border='0' cellspacing='0' cellpadding='1'>")
       Response.write("----
")
      Response.write(", \")
       response.write(\"
\")
        If enr_main(\"service\")=4 then
          Response.write(\"\")
        End if
         Response.write(replace(replace(replace(enr_main(\"message\"),chr(13),\"
\"),\"é\", \"&eacute;\"),\"è\",\"&egrave;\"))
        If enr_main(\"service\")=4 then
          Response.write(\"\")
        End if
        Response.write(\"
\")
      Response.write(\"</td>\")
       Response.write(\"\")
       sql_reponses=\"SELECT * FROM \"&request.form(\"table\")&\", personnel_tbl, service_tbl WHERE id_auteur=[id personnel] AND [is service]=[service] AND reponse = TRUE AND id_message LIKE '\" & enr_main(\"id\") & \"' order by date\"
        SET enr_reponses = connexion.Execute(sql_reponses)
        If enr_reponses.EOF=False then
       Do while not enr_reponses.EOF
        Response.write(\"----
\")
        Response.write(\"")
        response.write("
")
        If enr_reponses("service")=4 then
         Response.write("")
        End if
        'teste si le groupe est autorisé à éditer le message
        If enr_reponses("id_auteur")=session("id_personnel") or session("groupe")="Administratif" then
         Response.write("R&eacute;ponse de "&replace(replace(enr_reponses("NOM"),"é","&eacute;"),"è","&eacute;")&", "&replace(replace(enr_reponses("Prénom"),"é","&eacute;"),"è","&eacute;")&" :
")
         If enr_reponses("id_auteur")=session("id_personnel") or session("groupe")="Administratif" then
          Response.write("")
         End if
          Response.write(replace(replace(replace(enr_reponses("message"),chr(13),"
"),"é", "&eacute;"),"è","&egrave;"))
         If enr_reponses("id_auteur")=session("id_personnel") or session("groupe")="Administratif" then
          Response.write("")
         End if
        else
         Response.write("R&eacute;ponse de "&enr_reponses("NOM")&", "&enr_reponses("Prénom")&" :
")
         Response.write(replace(replace(replace(enr_reponses("message"),chr(13),"
"),"é", "&eacute;"),"è","&egrave;"))
        End if
        If enr_reponses("service")=4 then
          Response.write("")
        End if
        Response.write(", \")
        enr_reponses.Movenext
       LOOP
        else
       'insérer ici le message si vous voulez faire apparaitre qu'il n'y a pas de réponse
        End if
        enr_reponses.close
        Set enr_reponses=Nothing
        Response.write(\"----
")
        Response.write("
")
        If enr_main("id_auteur")=session("id_personnel") or session("groupe")="Administratif" then
         Response.write(" ")
        End If
     Response.write("
")
    Response.write("
</td></tr></table>")
   Response.write("</td>")
 Response.write("</tr>")
 enr_main.MoveNext
 i=i+1
 LOOP
 'Fin de la repetition
 End If
 SET enr_main = Nothing
 'Fin de la requête.

End If
Response.write("</table>")
%>

<hr />Je ne trouve pas comment faire
Messages postés
22
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
19 juillet 2006

là j'utilise replace pour le moment (bidouillage) mais j'ai pas fait pour à ô etc...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Salut,

l'ajax est un xml (sinon, c'est une xmlhttprequest simple...) bref, vous confondez trop souvent ces deux choses...
et un xml est toujours en utf -8 (sinon, il n'est pas conforme normalement)

bref, souvent, une requette xmlhttp est considérée comme une requette utf-8

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Messages postés
3
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
30 mai 2007
1
J'espere que ton probleme est réglé depuis... mais moi aussi j'ai vécu la même chose. J'ai perdu une matinée pour trouver une solution bien simple pourtant!

Lorsque tu envoies tes données en post assure toi d'utiliser la fonction "escape( )" pour transformer les caractères spéciaux.

xmlHttp.open("POST",url,false);
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');
xmlHttp.setRequestHeader("Content-length", data.length);
xmlHttp.send(escape(data));

Ensuite dans ta page ASP qui est appellée, ajoute cette petite fonction que tu pourras appeller pour décoder tes données.

<script language=JScript runat=server> 
  function Decode(str)
  { 
      return unescape(str);
  }
</script>

Pour faire l'appel de cette fonction, rien ne change. C'est comme une fonction en ASP.

var maChaine = Decode(String(Request.Form));

Voila! Tout fonctionne très bien pour moi, même avec la "Evil String of Death"

TestString" a ' b < ' > ",!"/%$?$&?%*(()%/"!"/&?%$/"*&$/"?%&?-f¯Ñ112<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

J'espère t'avoir aidé.
Messages postés
20
Date d'inscription
samedi 20 septembre 2003
Statut
Membre
Dernière intervention
14 août 2008

heu, j'me reveille tard mais MERCI à tous pour ces tuyaux :)
Fait plaisir de voir qu'on a pas été le seul à galèrer :p)

Be Good...
Messages postés
2
Date d'inscription
mardi 1 janvier 2008
Statut
Membre
Dernière intervention
1 janvier 2008

Bonjour !
Je remonte un peu le sujet car je viens de me lancer dans l'AJAX, et j'ai ce même soucis avec les accents
La solution de evangun est bien (le header avec le charset en ISO-8859-15), mais la question que je me pose maintenant c'est que j'utilise la réponse XML du traitement AJAX.
Donc j'ai déjà un header('Content-Type: text/xml');
Est-il possible de définir plusieurs fois la même en-tête, ou bien ... je ne sais quelle autre solution...

Merci par avance !
Messages postés
2
Date d'inscription
mardi 1 janvier 2008
Statut
Membre
Dernière intervention
1 janvier 2008

Bon autant pour moi mon problème est à priori résolu, j'avais mal utilisé la combinaison du escape() côté javascript et du urldecode() côté PHP :)
Messages postés
2
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
6 mai 2009

Merciiiiiiiiii
<?php
header('Content-Type: text/html; charset=ISO-8859-15');
?>
a resolu mon pb même qd je fais passer des valeurs par $_POST
Fatim