07/04/2013 Décoder du JSON envoyé en AJAX
Il est très simple d'envoyer du JSON en Ajax. Exemple avec jQuery :
jQuery.ajax({
type:'POST',
data: {"library":{"name": "Bibliothèque du Nord", "content": {"DVD" : [ ], "books":[{ "title": "Madame Bovary", "author": "Flaubert" },{ "title": "Une histoire sans nom", "author": "Barbey d'Aurevilly" }]}}},
...
Du côté serveur, la variable $_POST["data"] est une chaîne de caractères (l'objet sérialisé) au format UTF8.
Si l'on souhaite la traiter sans UTF8 et sous forme de tableau, on utilisera deux fonctions PHP prévues à cet effet : utf8_decode(string) et json_decode(string).
Sachant que la fonction json_decode requiert comme argument une chaîne de caractères au format UTF8 (cf doc "Cette fonction ne traite qu'avec des données encodées avec UTF-8."), il nous faut d'abord décoder le JSON puis convertir l'UTF8.
$_POST["data"]=json_decode(
$_POST["data"],
true /* retourne un tableau associatif */
);
et ensuite ... $_POST["data"]=utf8_decode($_POST["data"]); ?
Sûrement pas ! $_POST["data"] est à présent un tableau alors que la fonction utf8_decode exige un string...
On est obligé de se rabattre sur array_walk, sauf que ... notre tableau est multidimensionnel !
Heureusement, la fonction array_walk_recursive fait l'affaire.
Si - en guise de fonction de rappel - on utilise une fonction anonyme, l'instruction devient simplissime :
array_walk_recursive(
json_decode($_POST["data"],true),
function (&$value) {
$value=utf8_decode($value);
}
);
Inspiré de http://stackoverflow.com/questions/4897603/php-json-decode-something-not-display.
Commentaires
Ajouter un commentaire :
- Votre commentaire a bien été posté et sera publié après validation par le webmaster du site.