Encodage caractères AJAX
Résolu
neointhematrix
Messages postés
74
Statut
Membre
-
renoi -
renoi -
Bonjour à tous,
Je suis confronté à un problème qui, je pense, ne doit pas être trop compliqué à résoudre et pourtant je passe vraiment à coté :).
Je fais une application web avec de l'ajax. Lorsque je met à jour des données dans mes divs, via ma BDD, les caractères accentués se retrouve remplacés par ces (maudits) losanges noirs à point d'interrogation. apparemment ma bdd est en interclassement : Latin1_swedish_ci. Je ne sais pas si je dois mettre un truc de spécial quant à l'encodage dans ma page html et si il faut mettre quelque chose de spécial dans mon fichier php ou j'éxécute ma requete.
Merci d'avance de vos réponses.
Je suis confronté à un problème qui, je pense, ne doit pas être trop compliqué à résoudre et pourtant je passe vraiment à coté :).
Je fais une application web avec de l'ajax. Lorsque je met à jour des données dans mes divs, via ma BDD, les caractères accentués se retrouve remplacés par ces (maudits) losanges noirs à point d'interrogation. apparemment ma bdd est en interclassement : Latin1_swedish_ci. Je ne sais pas si je dois mettre un truc de spécial quant à l'encodage dans ma page html et si il faut mettre quelque chose de spécial dans mon fichier php ou j'éxécute ma requete.
Merci d'avance de vos réponses.
A voir également:
- Yggtorrent erreur ajax
- Yggtorrent - Accueil - Services en ligne
- YggTorrent : la nouvelle adresse qui fonctionne en 2023 - Accueil - Outils
- Erreur lors de l'enregistrement du contact - Forum Xiaomi
- Erreur 0x80070643 - Accueil - Windows
- Iptv erreur de lecture - Forum TV & Vidéo
11 réponses
slt,
j'ai eu ce problème la semaine dernière.
j'ai juste mis cette ligne ci-dessous en haut dans mon fichier avant la requête et ça m'a résolu mon problème de caractères bizarroides..
essaye toujours ->
header('Content-Type: text/html; charset=ISO-8859-1');
++
j'ai eu ce problème la semaine dernière.
j'ai juste mis cette ligne ci-dessous en haut dans mon fichier avant la requête et ça m'a résolu mon problème de caractères bizarroides..
essaye toujours ->
header('Content-Type: text/html; charset=ISO-8859-1');
++
Bon, en fait tout ça n'a rien de compliqué:
Tout les transferts AJAX, autant montant que descendant, se font en utf-8. En effet, même si PHP n'est en UTF8 par default que de puis PHP 5.4, javascript lui travaille en utf-8, les données sont dont envoyées dans ce format.
Donc lorsque des données sont envoyées, il convient de decoder la chaine de caractères AVANT le traitement : $str=utf8_decode($str);
En suite, après le traitement, il faut encore prendre garde à encoder ses chaines de caractère : $str=htmlentities($str,ENT_QUOTES,"UTF-8");
Ne pas oublier d'envoyer les en-tetes avec la réponse afin de respecter les contraintes du protocole http.
Donc à l'envoi du resultat vers le client:
header('Content-Type: text/html;charset=utf-8');
echo $reponse;
Tout les transferts AJAX, autant montant que descendant, se font en utf-8. En effet, même si PHP n'est en UTF8 par default que de puis PHP 5.4, javascript lui travaille en utf-8, les données sont dont envoyées dans ce format.
Donc lorsque des données sont envoyées, il convient de decoder la chaine de caractères AVANT le traitement : $str=utf8_decode($str);
En suite, après le traitement, il faut encore prendre garde à encoder ses chaines de caractère : $str=htmlentities($str,ENT_QUOTES,"UTF-8");
Ne pas oublier d'envoyer les en-tetes avec la réponse afin de respecter les contraintes du protocole http.
Donc à l'envoi du resultat vers le client:
header('Content-Type: text/html;charset=utf-8');
echo $reponse;
Il y a des fonctions PHP pour l'encodage des données dans le format adéquates. Je me souviens avoir eu ce genre de problème avec de l'XML.
Fait des recherches sur les fonctions php, tu devrais trouver.
Désolé de ne pas pouvoir être plus précis, je n'ai pas mes sources à disposition pour chercher.
Fait des recherches sur les fonctions php, tu devrais trouver.
Désolé de ne pas pouvoir être plus précis, je n'ai pas mes sources à disposition pour chercher.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Aidez moi SVP, je ne sait pas où insérer : header('Content-Type: text/html; charset=ISO-8859-1');
Merci beaucoup d'avance!!!
Merci beaucoup d'avance!!!
Bon finalement j'ai résolu le probleme :
je met header('Content-Type:text/html; charset=utf-8');
au debut de ma page
puis je met header('Content-Type:text/html; charset=utf-8');
dans le fichier PHP que j'appelle grace a l'Ajax qui me permet d'afficher les messages du tchat
et plus de problemme d'accent de cedille etc ...
Si vous etes en ISO machin mettez iso machi,n ala place d'utf-8
Tchao
je met header('Content-Type:text/html; charset=utf-8');
au debut de ma page
puis je met header('Content-Type:text/html; charset=utf-8');
dans le fichier PHP que j'appelle grace a l'Ajax qui me permet d'afficher les messages du tchat
et plus de problemme d'accent de cedille etc ...
Si vous etes en ISO machin mettez iso machi,n ala place d'utf-8
Tchao
Si le texte est en variable, je propose tout de même ma solution :
Petite fonction PHP :
function codeajax($e){
mb_convert_encoding($e, "UTF-8", "ISO-8859-1");
}
Et ensuite, déclarons la variable $texte contenant le texte accentué :
$texte = "ééèè àà"
Il suffit de l'appeler de cette manière :
echo codeajax($texte);
J'utilise personnellement cette méthode... Surtout pratique pour du texte en variable, donc la plupart du temps provenant d'une base MySQL ^^
Petite fonction PHP :
function codeajax($e){
mb_convert_encoding($e, "UTF-8", "ISO-8859-1");
}
Et ensuite, déclarons la variable $texte contenant le texte accentué :
$texte = "ééèè àà"
Il suffit de l'appeler de cette manière :
echo codeajax($texte);
J'utilise personnellement cette méthode... Surtout pratique pour du texte en variable, donc la plupart du temps provenant d'une base MySQL ^^
Bonjour à toutes et à tous,
Je me permet de remonter un peu le topic.
j'ai bien mon "header('Content-Type: text/html; charset=ISO-8859-1'); " en haut de page. Tous mes accents passent bien, mais lors d'un jeu d'essai, je m'aperçois que pour écrire "français" il m'écrit "français".
Je suppose donc que ce Content-Type ne prend pas en charge le c cédille.
J'ai beau chercher je ne trouve pas .. Si jamais vous avez une idée, ou source que je n'aurai pas trouvé, c'est gentil de me la faire parvenir.
Merci beaucoup à ceux qui pourrons me répondre !
Necro27
[EDIT] non en fait aucun accent ne passent. Je passe par le biais de l'ajax pour afficher mes informations via du code php. mais euh...je cherche..
Il faudrait donc mettre un encodage sur la page .js
Je me permet de remonter un peu le topic.
j'ai bien mon "header('Content-Type: text/html; charset=ISO-8859-1'); " en haut de page. Tous mes accents passent bien, mais lors d'un jeu d'essai, je m'aperçois que pour écrire "français" il m'écrit "français".
Je suppose donc que ce Content-Type ne prend pas en charge le c cédille.
J'ai beau chercher je ne trouve pas .. Si jamais vous avez une idée, ou source que je n'aurai pas trouvé, c'est gentil de me la faire parvenir.
Merci beaucoup à ceux qui pourrons me répondre !
Necro27
[EDIT] non en fait aucun accent ne passent. Je passe par le biais de l'ajax pour afficher mes informations via du code php. mais euh...je cherche..
Il faudrait donc mettre un encodage sur la page .js
Je reviens un peu sur ce sujet un peu passé déjà mais j'ai fait des tests après avoir eu le même problème....
En fait il faudrait vérifier l'encodage CLIENT/SERVEUR de la base et ensuite vérifier si les tables ont bien le bon jeu de caractères.
Ensuite vérifier, si on passe par $.ajax() par exemple, que l'encoding ne soit pas UTF-8 par défaut.
Bonne continuation à tous.
@++ sur la sphère :D
En fait il faudrait vérifier l'encodage CLIENT/SERVEUR de la base et ensuite vérifier si les tables ont bien le bon jeu de caractères.
Ensuite vérifier, si on passe par $.ajax() par exemple, que l'encoding ne soit pas UTF-8 par défaut.
Bonne continuation à tous.
@++ sur la sphère :D
<?php $chaine = "ééé àà èèè"; ?> au début du document, puis entre les balises <body> et </body>:
<?php print htmlentities($chaine);?>
Et là plus de problème avec les accents. (je suppose qu'ici le script ajax et le script contenant le texte sont distincts).
Comme quoi Ajax c'est plus facile avec PHP.
echo utf8_encode($afficher);
qui va afficher la variable $afficher après l'avoir convertie en UTF8 :)