Json_encode() сбрасывание косых черт

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

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

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

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

Когда я открываю файл кеша, все мои косые черты "/" сбрасываются:

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

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

Ответ 1

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

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

! important: fooobar.com/questions/50166/... (знайте, с чем вы имеете дело - знайте своего врага)

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/"

Ответ 2

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

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

Ответ 3

С другой стороны, у меня возникла проблема с PHPUNIT, утверждающие, что URL-адреса содержались или равны URL-адресу json_encoded -

мой ожидаемый:

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

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

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

Если вам нужно выполнить сравнение, измените URL-адрес, используя:

addcslashes($url, '/')

допустимый вывод во время моих сравнений.

Ответ 4

Мне пришлось столкнуться с ситуацией как таковой, и просто,

str_replace("\/","/",$variable)

работал на меня.