Les accents n'apparaissent pas en AJAX mais PHP oui
NoritakaRomain
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Les accents n'apparaissent pas en AJAX mais PHP oui
- Comment supprimer les pubs qui apparaissent sans arrêt - Guide
- Easy php - Télécharger - Divers Web & Internet
- Les 6 amis qui apparaissent sur facebook - Forum Facebook
- Yggtorrent erreur ajax ✓ - Forum Webmastering
- Envoyer un sms groupé sans que les destinataires apparaissent - Forum Téléphones & tablettes Android
5 réponses
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
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
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)
<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)
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question