PRATIQUE PHP 
Gérer les caractères spéciaux dans Ajax
 
"Quand j'utilise Ajax, mes accents sont remplacés par des graphiques sans rapport. Comment corriger ce comportement ?" (10/02/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

L'un des problèmes récurrents quand on met en place la méthode Ajax, est de s'apercevoir que les caractères spéciaux (particulièrement les accents) ne sont pas affichés avec le bon encodage. Là où les anglophones ne verront que peu de problèmes, les autres développeurs doivent s'assurer que toutes les informations passent de la manière voulue.

Par défaut, l'objet XMLHttpRequest est censé traiter les requêtes avec l'encodage UTF-8, ce qui devrait normalement libérer de toutes les contraintes possibles au niveau des caractères. Cependant, ce n'est pas toujours le cas selon les navigateurs (particulièrement Internet Explorer, malheureusement), et il peut arriver que l'on souhaite utiliser un autre encodage.

Pour ce qui concerne l'affichage, cela peut être pris en compte côté serveur, en faisant renvoyer non pas les données telles quelles, mais en les traitant d'abord avec par exemple la fonction PHP htmlentities(). Les entités HTML n'étant pas concernées par l'encodage, les accents s'afficheront correctement. Par exemple, pour reprendre notre exemple du changement de texte, voici comme l'on modifierait validLogin.php :
  1. <?php
  2. // Nous partons du principe que le code SQL est complet et bon.
  3. echo true.",".htmlentities($_GET['login']);
  4. ?>
On pourra également changer l'encodage du texte reçu avant de la stocker, à l'aide par exemple de la fonction PHP mb_convert_encoding(), qui autorise le passage d'un codage à un autre :
  1. <?php
  2. mb_convert_encoding("té trö lôl uè mdr!!!1", "UTF-8", "ISO-8859-1");
  3. ?>

…ou, pour ceux qui ont cette extension installée, faire appel à iconv :

  1. <?php
  2. echo iconv("ISO-8859-1","UTF-8","té trö lôl uè mdr!!!1");
  3. ?>
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page