json_encode et json_decode en PHP4
Par CrazyCat le 05/06/2009, 23:01 - PHP - Lien permanent
Malgré ce que j'ai pu dire précédemment, il arrive parfois que je doive adapter mes scripts pour des versions anciennes de PHP. Je suis donc obligé d'avoir une petite série de fonctions de compatibilité, que je vais vous proposer au fil de mes développements.
Les fonction json (decode et encode) ne sont natives en PHP que depuis la version 5.2, mais heureusement il y a un moyen de les rendre accessibles depuis les versions antérieures. Pour cela, il faut télécharger le package JSON-PEAR et en extraire le fichier JSON.php.
Ensuite, ce petit script vous permet de créer (si nécessaire) les fonctions:
<?php if ( !function_exists('json_decode') ){ require_once (dirname(__FILE__).'/JSON.php'); function json_decode($content, $assoc=false){ if ( $assoc ){ $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); } else { $json = new Services_JSON; } return $json->decode($content); } } if ( !function_exists('json_encode') ){ require_once (dirname(__FILE__).'/JSON.php'); function json_encode($content){ $json = new Services_JSON; return $json->encode($content); } } ?>
Bien entendu, je pars du principe que JSON.php est dans le même répertoire que le fichier de fonctions, à vous d'adapter les chemins utilisés dans require_once
Commentaires
merci :) tout ceci va bien me servir pour un plugin wordpress
Bonjour !
J'ai testé et ça fonctionne très bien, mais le seul soucis que j'ai c'est avec les apostrophes... Il arrive que sur certain mots, elle soient tout simplement supprimée...
Savez-vous comment remédier à ce problème ?
As-tu un exemple que je puisses tester ? Et surtout, s'agit-il bien d'une apostrophe "normale" et pas d'une apostrophe windows ?
@Jacqo
Cette librairie est faite pour gérer des chaines UTF-8. Je pense donc que vos problèmes proviennent du fait que votre script soit en ISO-8859-1
Vous pouvez modifier la fonction si dessus avec :
utf8_decode($json->decode(utf8_encode($content)));
...
utf8_decode($json->encode(utf8_encode($content)));
Ce post date de 2009 mais vient de me sauver la vie, un grand merci :)