Bonjour à tous,

Mon problème est le suivant : lorsque je récupère des données de ma base via une requête SQL, je fais un json_encode sur le résultat de la requête et j'envoie ça à mon fichier Javascript qui se charge d'afficher le résultat.

Seulement, quand il s'agit de résultats comportant des mots accentués. le json_encode tronque le résultat en ne prenant que la partie non-accentuée (exemple pour Château > Ch )

J'ai testé avec un var_dump en laissant le résultat sous forme de tableau, cela fonctionne très bien. Donc le problème se situe au niveau du json_encode.

Pour précision ma base est en Latin-1.

J'ai lu que json_encode ne fonctionnait qu'avec de l'utf-8, mais dans un article qui date de 2006 et disait que ça allait bientôt s'arranger.


Ma question est : y a t-il un moyen d'encoder en json du latin-1? est-ce qu'il y a d'autres façons de faire pour éviter ce problème. mise à part l'utilisation d'un tableau.

D'avance merci.
Bonjour,

S'il est spécifié que json_encode n'accepte que des chaînes en UTF-8, cela ne changera pas car il n'y a aucun moyen fiable de déterminer l'encodage d'une chaîne.

Une solution simple est de garantir que ta structure de données contient des chaînes encodées en UTF-8 en leur appliquant utf8_encode.
Modifié par Julien Royer (30 Jun 2011 - 10:10)
inalgnu a écrit :
Pour précision ma base est en Latin-1.

Par curiosité: parce que le site est vieux (plus de cinq ans), ou parce que tu as fait un mauvais choix à la création du site?

Je conseillerais bien de tout faire en UTF-8 et de convertir la base en UTF-8 également si tes données sont réellement en ISO-8859-1, mais il est vrai que ça peut être une tâche compliquée. Peut-être juste convertir tes données de ISO-8859-1 vers UTF-8 (il y a des fonctions PHP pour ça) avant de générer ton code JSON, et configurer le serveur (ou utiliser les fonctions PHP équivalentes) pour déclarer un charset UTF-8 dans l'en-tête HTTP Content-Type.