[Ajax] probleme de charset

death83
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 6 Jan 2006

[Ajax] probleme de charset

Message le Mer Mar 08, 2006 22:12

Salut a tous,

J'ai fait un truc tout bete en AJAX:

Code: Tout sélectionner
<input id="moteur" class="moyeninput2" type="text" name="motcle" onkeyup="go(document.getElementById(\'moteur\').value,\'afftab\',\'../AJAX/accueilmanga.php?motcle=\');">

La fonction go est une fonction qui va communiquer avec la page php suivante:

Code: Tout sélectionner
<?php
include ('../BDD/connection.php');
$search=$_GET['motcle'];
echo $search;
?>


grace a :
Code: Tout sélectionner
   function go(envoi,idcible,page_ajax){
         
             getXhr()
            
            xhr.onreadystatechange = function(){
               
               if(xhr.readyState == 4 && xhr.status == 200)
               {   
                  text_renv = xhr.responseText;
                  document.getElementById(idcible).innerHTML=text_renv;
               }
            }
            xhr.open("GET",page_ajax+envoi,true);
            xhr.send(null);
         }


J'ai donc en temps rélle ce que je tape dans l'input qui apparait sur ma page.

Mais quand je fais des ' ou " il me rajoute un \ devant et les accent ne sont pas bien affiché. Comme si il avait changer le charset d'une page a l'autre.

Vous savez pourquoi?


MarvinLeRouge
WRInaute impliqué
WRInaute impliqué
 
Messages: 525
Inscription: 1 Sep 2004

Message le Mer Mar 08, 2006 22:25

Salut,

Regarde du côté de urldecode et urlencode, ça pourrait résourdre ton problème.

death83
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 6 Jan 2006

Message le Mer Mar 08, 2006 22:57

Non ca ne peut pas etre ca car j'affiche du texte qui n'est pas passé par l'url. Et qui ne s'affiche pas correctement non plus.


par exemple si sur ma page que j'appelle je faire un echo ''Série";
ca va m'afficher dans la page qui appelle:
S�ries

lapincouch
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: 27 Aoû 2004

Message le Jeu Mar 09, 2006 11:28

L'AJAX envoie TOUJOURS les données encodées en UTF8!!!

Il faut décoder les données reçues à l'aide de la fonction utf8_decode.

Par exemple en PHP :

Code: Tout sélectionner
foreach($_POST as $key => $val){
    $_POST[$key] = utf8_decode($val);
}


Phix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 420
Inscription: 15 Juin 2004

Message le Jeu Mar 09, 2006 11:33

Sinon, dans la page php, tu insères:
Code: Tout sélectionner
header('Content-Type: text/html; charset=ISO-8859-1');

en début de code, comme ca tout est envoyé directement en iso 8859 et pas besoin de fonction utf8...

lapincouch
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: 27 Aoû 2004

Message le Jeu Mar 09, 2006 11:37

Sinon, dans la page php, tu insères:


tu veux dire dans la page receptrice du formulaire?
ou celle qui contient le formulaire?

Bourriquet
WRInaute impliqué
WRInaute impliqué
 
Messages: 637
Inscription: 19 Sep 2005

Message le Jeu Mar 09, 2006 11:54

Phix a écrit:Sinon, dans la page php, tu insères:
Code: Tout sélectionner
header('Content-Type: text/html; charset=ISO-8859-1');

en début de code, comme ca tout est envoyé directement en iso 8859 et pas besoin de fonction utf8...


+1 : j'allais le dire. C'est ce que j'utilise systèmatiquement et ça a palier au problème.


Phix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 420
Inscription: 15 Juin 2004

Message le Jeu Mar 09, 2006 11:57

lapincouch a écrit:tu veux dire dans la page receptrice du formulaire?
ou celle qui contient le formulaire?


Celle qui est appellée en Ajax :

Code: Tout sélectionner
<?php
include ('../BDD/connection.php');
$search=$_GET['motcle'];
echo $search;
?>


devient :

Code: Tout sélectionner
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
include ('../BDD/connection.php');
$search=$_GET['motcle'];
echo $search;
?>

death83
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 6 Jan 2006

Message le Jeu Mar 09, 2006 13:35

Oki merci je vais essayer ca ce soir et je vous dirais si ca marche.

death83
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 6 Jan 2006

Message le Jeu Mar 09, 2006 18:42

Merci ca marche avec le header ;).

lapincouch
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: 27 Aoû 2004

Message le Jeu Mar 09, 2006 21:03

ça marche pas chez moi :cry:

par contre, j'utilise ce code javascript, cà vient peut-être de là?

Code: Tout sélectionner
function Request( url, action )
{
   var obj =  loadXMLObj() ;
   //if ( obj == false ) { alert("AJAX ne peut pas être initialisé.\nL'administration est impossible."); return; }
   obj.open("POST", url, false ) ;
   /*
   'this value is ignored, but the step is necessary
xmlRequest.setRequestHeader "Cookie", "any non-empty string here"
'set all cookies here
xmlRequest.setRequestHeader "Cookie", "cookie1=value1; cookie2=value2"
*/
   obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=iso-8859-1');
  //obj.setRequestHeader('Content-Type','text/plain');
  //objHTTP.send("id=1&user="+txtUser.value+"&password="+txtPassword.value);
   /*
   obj.onreadystatechange=function()
    {
   if (xmlhttp.readyState==4)
      {
     if (xmlhttp.status==200) alert("URL Exists!")
     else if (xmlhttp.status==404) alert("URL doesn't exist!")
     else alert("Status is "+xmlhttp.status)
  }
*/
  action =  "date=" + Date() + (action =="" ? "" : "&" + action) ;
   obj.send( action );
  data = obj.responseText   ;
   //alert(data);
   return data ;
}

function loadXMLObj()
{
   obj = false;
   // branch for native XMLHttpRequest object
   if (window.XMLHttpRequest) { try {   obj = new XMLHttpRequest();   } catch(e) { obj = false;   }      }
   // branch for IE/Windows ActiveX version
   else if(window.ActiveXObject)
      {
      try {   obj = new ActiveXObject("Msxml2.XMLHTTP");}
      catch(e)
         {
         try {   obj = new ActiveXObject("Microsoft.XMLHTTP");   } catch(e) { obj = false; }
         }
      }
  return obj ;
}


merci bien pour toutes ces idées... :wink:

death83
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 6 Jan 2006

Message le Ven Mar 10, 2006 7:49

[quote="lapincouch"]ça marche pas chez moi :cry:

par contre, j'utilise ce code javascript, cà vient peut-être de là?
[/code]
Ca dépend tu utilise quel charset sur tes pages toi.

C'est sur que si tu n'utilise pas le même que moi ca ne marchera pas.

Tu es peut etre en utf8 non?

lapincouch
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: 27 Aoû 2004

Message le Ven Mar 10, 2006 8:54

non, en fait la page qui contient le formulaire est en iso,
par contre, la page appelée n'a pas de charset prédéfini car elle fait toujours une redirection.

Jeff974
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 1
Inscription: 21 Avr 2006

Message le Ven Avr 21, 2006 8:26

Salut,
j'ai trouvé une solution bien plus pratique que de rajouter un header dans chaque fichier.
Il suffit d'utiliser
Code: Tout sélectionner
overrideMimeType('text/html; charset=ISO-8859-15');

Comme dans l'exemple suivant :
Code: Tout sélectionner
req.open("GET", url, true);
req.overrideMimeType('text/html; charset=ISO-8859-15');
req.send(null);


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité