JSON encode () экранирование прямых косых черт



я вытаскиваю JSON из Instagram:



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



затем разбор переменных в массив PHP для реструктуризации данных, затем повторное кодирование и кэширование файла:



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



когда я открываю файл кэша все мои косые черты " / " экранируются:



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



Я понял из моих поисков, что json_encode() автоматически делает this...is есть способ отключить его?

509   3  

3 ответов:

есть ли способ отключить его?

да, вам нужно только использовать JSON_UNESCAPED_SLASHES флаг.

!важно читайте раньше:https://stackoverflow.com/a/10210367/367456 (знай, с чем имеешь дело - знай своего врага)

json_encode($str, JSON_UNESCAPED_SLASHES);

если у вас нет PHP 5.4 под рукой, выберите одну из многих существующих функций и измените их в соответствии с вашими потребностями, например http://snippets.dzone.com/posts/show/7487 (архивная копия).

Пример Демо

<?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";

Пример:

"http:\/\/www.example.com\/"
"http://www.example.com/"

Да, но не побег вперед косые черты это хорошо. При использовании JSON внутри <script> теги это необходимо как </script> в любом месте - даже внутри строки-закончится тег скрипта.

в зависимости от того, где используется JSON это не обязательно, но это может быть проигнорировано.

С другой стороны, у меня была проблема с утверждением PHPUnit URL-адреса содержались или равны url-адресу, который был json_encoded -

мой ожидается:

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

будет закодировано:

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

Если вам нужно сделать сравнение, Преобразуя url с помощью:

addcslashes($url, '/')

допускается для правильного вывода во время моего сравнения.

Comments

    Ничего не найдено.