JSON encode () Escape forward slashes

je tire JSON d'Instagram:

$instagrams = json_decode($response)->data;

, Puis l'analyse des variables dans un tableau PHP à restructurer les données, puis de le ré-encodage et la mise en cache du fichier:

file_put_contents($cache,json_encode($results));

quand j'ouvre le fichier cache, tous mes slashs avant sont échappés:

http://distilleryimage4.instagram.com/410e7...

je déduis de mes recherches que json_encode() fait automatiquement ce...est-il un moyen de le désactiver?

132
demandé sur AbraCadaver 2012-04-18 17:24:23

3 réponses

est-il un moyen de le désactiver?

Oui, vous n'avez qu'à utiliser le drapeau JSON_UNESCAPED_SLASHES .

!important à lire avant: https://stackoverflow.com/a/10210367/367456 (savoir ce que vous avez à traiter avec - connaissez votre ennemi)

json_encode($str, JSON_UNESCAPED_SLASHES);

si vous n'avez pas PHP 5.4 à portée de main, choisissez l'une des nombreuses fonctions existantes et les modifier selon vos besoins, par exemple http://snippets.dzone.com/posts/show/7487 (copie archivée) .

Exemple De Démonstration

<?php
/*
 * Escaping the reverse-solidus character ("/", slash) is optional in JSON.
 *
 * This can be controlled with the JSON_UNESCAPED_SLASHES flag constant in PHP.
 *
 * @link http://stackoverflow.com/a/10210433/367456
 */    

$url = 'http://www.example.com/';

echo json_encode($url), "\n";

echo json_encode($url, JSON_UNESCAPED_SLASHES), "\n";

Exemple De Sortie:

"http:\/\/www.example.com\/"
"http://www.example.com/"
216
répondu hakre 2017-07-26 23:23:56

Oui , mais à ne pas s'échappant des slashes ( / ) est une bonne chose . Lorsque vous utilisez JSON à l'intérieur des balises <script> , il est nécessaire d'utiliser </script> n'importe où - même à l'intérieur d'une chaîne de caractères - pour terminer la balise script.

selon l'endroit où le JSON est utilisé, il n'est pas nécessaire, mais il peut être ignoré en toute sécurité.

34
répondu ThiefMaster 2017-05-23 12:34:23

de l'autre côté, J'avais un problème avec PHPUNIT affirmant que les urls étaient contenues dans ou égales à une url qui était json_encoded -

mon attendus:

http://localhost/api/v1/admin/logs/testLog.log

serait codé en:

http:\/\/localhost\/api\/v1\/admin\/logs\/testLog.log

si vous avez besoin de faire une comparaison, transformant l'url en utilisant:

addcslashes($url, '/')

autorisé pour la bonne sortie pendant mes comparaisons.

3
répondu Squadrons 2015-03-13 19:30:19