Maison >développement back-end >tutoriel php >Pourquoi « json_encode » ajoute-t-il des barres obliques inverses et comment puis-je l'empêcher ?

Pourquoi « json_encode » ajoute-t-il des barres obliques inverses et comment puis-je l'empêcher ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 04:36:01406parcourir

Why does `json_encode` add backslashes and how can I prevent it?

Json_encode ajoute des barres obliques inverses : dévoiler le mystère

Dans le domaine de JavaScript, json_encode est depuis longtemps un allié de confiance pour encoder des données au format JSON . Cependant, certains développeurs ont rencontré un phénomène inattendu où json_encode introduit des barres obliques inverses dans la sortie.

L'énigme du téléchargement

Un tel cas se produit lors de l'utilisation de json_encode pour renvoyer des données JSON après un téléchargement de fichier. Considérez le code suivant :

print_r($result); // Associative array

$encoded_result = json_encode($result); // Valid JSON

echo $encoded_result;

Les barres obliques inverses inexpliquées

À la surprise du développeur, le JSON résultant inclut des barres obliques inverses indésirables :

{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}

Identifier le coupable

Les enquêtes initiales ont révélé que les barres obliques inverses étaient ajoutées quelque part entre json_encode et l'analyse des données JSON par le navigateur.

alert(data.toSource()); // Result: invalid JSON with added "status:200"

La variable cachée

Un examen plus approfondi a révélé un coupable inattendu : l'événement de liaison Plupload.

uploader.bind('FileUploaded', function(up, file, data) {
  alert(data.toSource());
  $('#' + file.id + " b").html("100%");
});

Plupload, une bibliothèque de téléchargement de fichiers populaire, semblait manipuler les données renvoyées, ajoutant la propriété "status:200" et encodant les barres obliques.

La solution : échapper aux barres obliques

Pour contrecarrer les barres obliques inverses indésirables, le code a été modifié pour inclure le " JSON_UNESCAPED_SLASHES" dans l'appel de fonction json_encode :

$encoded_result = json_encode($result, JSON_UNESCAPED_SLASHES);

Cette option désactive efficacement l'échappement des barres obliques, ce qui donne la sortie JSON souhaitée :

{"logo_url":"http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}

Dévoiler la vérité

En conclusion, l'ajout de barres obliques inverses dans la sortie json_encode a été attribué à la manipulation involontaire des données par l'événement de liaison Plupload. En incorporant l'option "JSON_UNESCAPED_SLASHES", les développeurs peuvent empêcher ce caractère d'échappement indésirable d'interférer avec leurs données JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn