Problème avec les accents et AJAX

Résolu
cs_maxos75 Messages postés 22 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 19 juillet 2006 - 15 juin 2006 à 18:05
marysefat2000 Messages postés 2 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 6 mai 2009 - 6 mai 2009 à 20:14
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

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 juil. 2006 à 02:42
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
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 juin 2006 à 20:00
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

0
cs_maxos75 Messages postés 22 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 19 juillet 2006
16 juin 2006 à 09:35
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
0
cs_maxos75 Messages postés 22 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 19 juillet 2006
16 juin 2006 à 09:37
là j'utilise replace pour le moment (bidouillage) mais j'ai pas fait pour à ô etc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 juin 2006 à 19:22
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

0
JeePI196 Messages postés 3 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 30 mai 2007 1
30 mai 2007 à 17:49
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é.
0
cs_krma Messages postés 20 Date d'inscription samedi 20 septembre 2003 Statut Membre Dernière intervention 14 août 2008
10 déc. 2007 à 17:20
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...
0
bpweb66 Messages postés 2 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 1 janvier 2008
1 janv. 2008 à 18:30
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 !
0
bpweb66 Messages postés 2 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 1 janvier 2008
1 janv. 2008 à 20:29
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 :)
0
marysefat2000 Messages postés 2 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 6 mai 2009
6 mai 2009 à 20:14
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
0
Rejoignez-nous