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.
Configuration: Windows XP Firefox 2.0.0.6
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');
++-
Il faut en effet encoder avec iso-8859-1, mais ce n'est pas suffisant. ça marche si le texte est déclaré sous forme de variable php, puis il faut utiliser htmlentities. Par exemple:
<?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. -
-
-
-
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; -
-
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. -
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!!!-
Bahh j'ai le meme probleme moi je suis en utf-8 ,normalement un header se met avant toute ligne de code (donc en haut du fichier) !!!!
Vivent les tchat en ajax !!!- 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
-
-
-
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 ^^ -
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 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 -