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

Patricia Arquette
Libérer: 2024-11-12 04:36:01
original
253 Les gens l'ont consulté

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;
Copier après la connexion

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}}
Copier après la connexion

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"
Copier après la connexion

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%");
});
Copier après la connexion

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);
Copier après la connexion

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}}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal