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?
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) .
<?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/"
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é.
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.