La raison de cela m'échappe.
JSON échappe à la barre oblique, donc un hachage {a: "a/b/c"}
est sérialisé en tant que {"a":"a\/b\/c"}
au lieu de {"a":"a/b/c"}
.
Pourquoi?
javascript
json
Jason S
la source
la source
json_encode()
échappe les barres obliques par défaut, mais a laJSON_UNESCAPED_SLASHES
possibilité à partir de PHP 5.4.0 (mars 2012)'</'
echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Réponses:
JSON ne vous oblige pas à le faire, il vous permet de le faire. Il vous permet également d'utiliser "\ u0061" pour "A", mais ce n'est pas obligatoire. Permettre
\/
aide lors de l'incorporation de JSON dans une<script>
balise, ce qui n'autorise pas les</
chaînes internes, comme le souligne Seb.Certaines API ASP.NET Ajax / JSON de Microsoft utilisent cette échappatoire pour ajouter des informations supplémentaires, par exemple, un datetime sera envoyé en tant que
"\/Date(milliseconds)\/"
. (Beurk)la source
/
n'est pas nécessaire de s'échapper , il est autorisé , pour faciliter l'utilisation de JSON. Si vous ne voulez pas vous échapper/
, alors ne le faites pas.La spécification JSON indique que vous POUVEZ échapper à la barre oblique, mais ce n'est pas obligatoire.
la source
J'ai posé la même question il y a quelque temps et j'ai dû y répondre moi-même. Voici ce que j'ai trouvé:
la source
PHP échappe les barres obliques par défaut, ce qui explique probablement pourquoi cela apparaît si souvent. Je ne sais pas pourquoi, mais peut-être parce que l'incorporation de la chaîne à l'
"</script>"
intérieur d'une<script>
balise est considérée comme dangereuse.Cette fonctionnalité peut être désactivée en passant l'
JSON_UNESCAPED_SLASHES
indicateur mais la plupart des développeurs ne l'utiliseront pas car le résultat d'origine est déjà JSON valide.la source
Ugly PHP!
L'
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
option doit être par défaut, pas une option (étrange) ... Comment le dire aux développeurs php?La valeur par défaut DOIT être l'utilisation la plus fréquente et les normes (actuelles) les plus utilisées comme UTF8. Combien de fragments de code PHP dans le Github ou ailleurs ont besoin de cette fonctionnalité exoctique "incorporée dans HTML"?
la source
'\/' === '/'
renvoie vrai. Je vous conseille de vous en tenir aux faits. La plupart des gens sont capables de gérer quelques noms de fonction incohérents. Ce n'est pas parce que vous ne pouvez pas voir le passé que PHP n'est pas un mauvais outil.