Ticket #231 (closed bug: fixed)

Opened 1 year ago

Last modified 1 year ago

Encodage / Charset accents avec JSON-RPC

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

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

json-utf8-patch.diff (60.4 kB) - added by Julien on 07/27/07 23:23:01.
Patch JSON-UTF8

Change History

07/26/07 20:38:44 changed by laurentj

  • keywords set to json.
  • owner deleted.
  • priority changed from normal to high.
  • component changed from jelix:core request to jelix:utils.
  • milestone set to Jelix 1.0beta3.

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.

07/27/07 14:58:36 changed 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.

07/27/07 23:23:01 changed by Julien

  • attachment json-utf8-patch.diff added.

Patch JSON-UTF8

07/27/07 23:30:43 changed 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

07/28/07 23:20:55 changed by laurentj

  • status changed from new to closed.
  • resolution set to fixed.

Patch parfait :-) Inclus dans le trunk.

Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed