developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 13 years ago

Closed 13 years ago

#231 closed bug (fixed)

Encodage / Charset accents avec JSON-RPC

Reported by: Julien Owned by:
Priority: high Milestone: Jelix 1.0beta3
Component: jelix:utils Version: trunk
Severity: major Keywords: json
Cc: Blocked By:
Blocking: Documentation needed:
Hosting Provider: Php version:

Description

En suivant l'exemple du manuel, j'ai mis en place un service JSON-RPC.

Tout marche nickel, sauf quand les paramètres de la requete contiennent des caractères accentués (à partir d'une page en UTF-8, pas testé en iso-8859-1).

Les caractères accentués sont effacés lors du décodage de la requete.

J'ai remplacé le décodage JSON de jelix par un appel à la fonction php native json_decode() directement dans la classe jJsonRpcRequest pour tester, et là plus de problème, les paramètres sont transmis avec les accents au controleur.

Aucune idée sur l'origine du problème.

HS : Il pourrait être intéressant de tester dans jJsonRpcRequest la présence de la fonction json_decode() pour l'utiliser en lieu et place du décodage actuel. Mais bon, ca ne solutionne pas le problème.

Je ne sais pas si ca a un rapport, mais dans une réponse JSON, les accents sont encodés de la façon suivante : "h\u00e9h\u00e9" pour "héhé" (idem pour la fonction native php json_encode()).

Je peux mettre un exemple en ligne si nécessaire.

Attachments (1)

json-utf8-patch.diff (60.4 KB) - added by Julien 13 years ago.
Patch JSON-UTF8

Download all attachments as: .zip

Change History (5)

comment:1 Changed 13 years ago by laurentj

  • Component changed from jelix:core request to jelix:utils
  • Keywords json added
  • Milestone set to Jelix 1.0beta3
  • Owner laurentj deleted
  • Priority changed from normal to high

La classe utilisée pour décoder le JSON (dans lib/JSON) est une classe tierce et n'a pas été développée par l'équipe Jelix. Voir si il n'y a pas une version plus récente de cette classe qui corrigerait le problème.

Peut-être qu'il s'agit d'un défaut de support de l'UTF-8 dans cette classe. À vérifier.

Il pourrait être intéressant de tester dans jJsonRpcRequest la présence de la fonction json_decode() pour l'utiliser en lieu et place du décodage actuel

C'est le genre de truc que je déteste, car quelque soit la présence de la fonction, il y a du code mort. Je trouve ça crade. Cependant, tu peux te faire un build de jelix (à partir des sources qu'il y a dans le depot svn) qui utilise les fonctions native json de PHP au lieu de cette classe tierce, en activant l'option ENABLE_PHP_JSON dans le fichier de paramètrage de build.

comment:2 Changed 13 years ago by Julien

La classe http://mike.teczno.com/JSON/JSON.phps du meme auteur ne pose plus le problème.

C'est une classe issue de PEAR, mais avec 2-3 modifs mineures, on retomberait sur nos pieds.

Je proposerai un patch si les essais sont concluants avec Dragon-CMS.

Changed 13 years ago by Julien

Patch JSON-UTF8

comment:3 Changed 13 years ago by Julien

Laurent, voici un patch qui semble fonctionner et qui intègre la classe citée dans mon post précédent.

J'ai modifié un peu la classe pour virer les appels à PEAR.

j'ai aussi changé le fichier LICENSE car c'est sous licence BSD et plus PHP.

Dans jJsonRpc, la seule chose qui change est que la classe tierce s'appelle SERVICES_JSON et non plus JSON.

J'espère avoir bien fait pour mon premier patch ;)

@+ Julien

comment:4 Changed 13 years ago by laurentj

  • Resolution set to fixed
  • Status changed from new to closed

Patch parfait :-) Inclus dans le trunk.

Note: See TracTickets for help on using tickets.