[Ajax] probleme de charset

WRInaute discret
Salut a tous,

J'ai fait un truc tout bete en AJAX:

Code:
<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:
<?php
include ('../BDD/connection.php'); 
$search=$_GET['motcle'];
echo $search;
?>

grace a :
Code:
	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?
 
WRInaute discret
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:
 
Nouveau WRInaute
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:
foreach($_POST as $key => $val){
    $_POST[$key] = utf8_decode($val);
}
 
WRInaute occasionnel
Sinon, dans la page php, tu insères:
Code:
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...
 
WRInaute impliqué
Phix a dit:
Sinon, dans la page php, tu insères:
Code:
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.
 
WRInaute occasionnel
lapincouch a dit:
tu veux dire dans la page receptrice du formulaire?
ou celle qui contient le formulaire?

Celle qui est appellée en Ajax :

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

devient :

Code:
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
include ('../BDD/connection.php');
$search=$_GET['motcle'];
echo $search;
?>
 
Nouveau WRInaute
ça marche pas chez moi :cry:

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

Code:
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:
 
WRInaute discret
lapincouch a dit:
ç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?
 
Nouveau WRInaute
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.
 
Nouveau WRInaute
Salut,
j'ai trouvé une solution bien plus pratique que de rajouter un header dans chaque fichier.
Il suffit d'utiliser
Code:
overrideMimeType('text/html; charset=ISO-8859-15');
Comme dans l'exemple suivant :
Code:
req.open("GET", url, true);
req.overrideMimeType('text/html; charset=ISO-8859-15');
req.send(null);
 
Discussions similaires
Haut