Bonjour,

C'est dans l'air du temps, faut faire des sites en chinois...

J'ai le souci suivant : j'alimente certains champs d'une base en passant par ajax. Le pb est que lors du transfert vers le serveur (par POST), les caractères chinois sont convertis en %u... (ex : %u4E1A%u4F59%u751F%u6D3B) et je ne sais pas les retraduire dans un format plus adapté.

J'ai évidemment passé le site en utf8, mais ça ne change strictement rien au pb.

Merci d'avance pour une solution,

Tonio
Administrateur
Bonjour,

"passer le site en UTF-8" ce sont les pages du site ou bien aussi la base de données ? Que se passe-t-il entre la soumission du formulaire et le retour des données à l'affichage (en passant par la BDD donc) ?
Bonjour,

Le site et la base sont en utf-8 (et pour la base : la base entière, les tables et les champs).

Lorsque je soumets un formulaire par la méthode classique (<form action="xxx" method="POST" ...>) les données s'enregistrent sous la forme "&#20013;&#25991;...", ce qui est bien restitué. En revanche, lorsque je transmets ces données par Ajax, elles sont codées du genre "%u4E1A%u4F59"...
Tonio a écrit :
les données s'enregistrent sous la forme "&#20013;&#25991;..."


Ben voilà. Tu transformes le texte en entités? C'est pas nécessaire en utf8 (à part pour <, > et &) bien sûr... Et peut être les quotes...
Modifié par Patidou (20 Apr 2010 - 13:47)
mais encore ?

parles-tu d'utiliser htmlentities ? Il faudrait que je puisse faire l'équivalent depuis le javascript qui appelle ajax...
Ah ouais c'est de l'ajax... Smiley confused Tu dois bien faire appel à une fonction php pour enregistrer dans la base de données non?
En fait, j'ai trouvé une solution, il y a peut-être plus élégant, mais ça marche : par ajax, je récupère les codes des caractères au format hexa (%uxxxx), et je les transforme en décimal par une expression rationnelle (&#xxxx;) :

$nom = preg_replace_callback("/%u([0-9a-fA-F]{1,4})/", create_function('$matches','return "&#".hexdec($matches[0]).";";'), $nom);


N'étant pas pro des expressions rationnelles, peut-être peut-on faire plus joli, mais ça marche...

A+ et merci