Les accents n'apparaissent pas en AJAX mais PHP oui

Fermé
NoritakaRomain Messages postés 7 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 15 octobre 2012 - 12 oct. 2012 à 10:36
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 15 oct. 2012 à 18:21
Bonjour,

je fais un petit site sur les pages perso de Free, et je rencontre un problème de caractères accentués. Mon site est en PHP. Quand j'affiche les éléments renvoyés par une requête sql en utilisant du PHP, les éléments affichés s'affichent parfaitement bien, les accents aussi. En revanche, quand je passe en AJAX (pour un système de recherche dynamique) pour afficher les même données, les accents sont symbolisés par un losange et un point d'interrogation.
J'ai pourtant bien mis en entête de toutes mes pages :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
et ça marche avec le reste de la page, ce n'est QUE pour ce qui m'est renvoyé par cet ajax.
De plus, quand j'affiche directement la page PHP appelée en AJAX les données s'affichent correctement, sans losanges. Du coup c'est quand l'AJAX récupère les données.
Comment aire ?

je vous donnes les parties des sources.

La partie PHP qui affiche les éléments de la requête dans la page et qui fonctionne :
<?php
// on crée la requête SQL
$sql = "SELECT * FROM recette order by titre";

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$linklist="";
while($data = mysql_fetch_assoc($req))
{
$linklist.= "<a href='/recettes/files/".$data['filename']."'>".$data['titre']."</a><br/>";
}
echo $linklist."<br/><br/>"
?>


La partie AJAX qui appelle la page PHP AJAX :


if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non support� par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
}

var data = "titre="+titre+"&type_id="+typeid+"&famid="+famid+"&fam2id="+fam2id+"&search=1";

//alert(data);//test

xhr_object.open("POST", 'search_ajax.php?'+data , false);
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhr_object.send(null);
if(xhr_object.readyState == 4){
//eval(xhr_object.responseText);
//alert(xhr_object.responseText);
document.getElementById('results').innerHTML=xhr_object.responseText;
}



NB : j'ai remarqué qu'avec Chrome je n'ai pas ce problème, soit dit en passant.

A voir également:

5 réponses

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
15 oct. 2012 à 18:21
bonsoir,

tu peux essayer d'utiliser la fonction utf8_encode() avant d'afficher pour l'ajax

sinon le mieux et de n'utiliser qu'un charset et donc utf-8 sinon on se perd vite.

pour les fichiers ça dépend du logiciel que tu utilises
(pour notepad++ : -Encodage > encoder en utf-8(sans BOM), et paramètres > préférences > nouveau documents UTF-8 sans BOM & appliquer a tout les fichier ANSI ouvert)

pour le html tu connais la balise a mettre dans le head

pour le sql mettre utf-8 general_ci partout

pour le php :
ini_set('default_charset','UTF-8');
mb_internal_encoding('UTF-8');
au début de chaque executions
(si tout pas par index.php c'est plus facile a gérer)

au moins tout est en utf-8 et il n'y a plus de problème avec les charset
par contre certaines fonction php comme substr() ne fonctionneront plus avec les chaines qui comporte des caractères accentués par exemple
mais il existe mb_substr() qui gère les chaine muti-octet.

https://www.php.net/manual/fr/book.mbstring.php
1
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
Modifié par Freedomsoul le 12/10/2012 à 10:43
il faut configurer l'encodage des caractères dans l'entete html

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
ou
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

selon ce que tu veux*

é
ou
& eacute (sans espace)
0
NoritakaRomain Messages postés 7 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 15 octobre 2012
12 oct. 2012 à 11:27
comme je l'ai mentionné précédemment, j'ai bien mis cette ligne sur TOUTES mes pages. Et d'ailleurs c'est pour cela que les caractères s'affichent bien quand j'affiche le résultat de ma requete sql directement en PHp. par contre en AJAX non.
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
12 oct. 2012 à 11:37
Tu as essayé en utf-8 ? si tes caractères sont sous la forme "é", ça fonctionne normalement
0
NoritakaRomain Messages postés 7 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 15 octobre 2012
12 oct. 2012 à 14:34
oui j'avais essayé, en voyant souvent ça comme solution sur le net, mais c'était pire, car AUCUN accents ne s'affichait, même pour ceux qui s'affichaient bien, ce n'était plus le cas.
0

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

Posez votre question
NoritakaRomain Messages postés 7 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 15 octobre 2012
15 oct. 2012 à 16:17
up !
Une idée ? Personne ?
0