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)
работал на меня.