Pobieram JSON z Instagrama:
$instagrams = json_decode($response)->data;
Następnie analizuje zmienne w tablicy PHP w celu zmiany struktury danych, a następnie ponownie koduje i buforuje plik:
file_put_contents($cache,json_encode($results));
Kiedy otwieram plik pamięci podręcznej, wszystkie moje ukośniki „/” są zmieniane:
http:\/\/distilleryimage4.instagram.com\/410e7...
Wychodzę z moich wyszukiwań, że json_encode()
automatycznie robi to ... czy istnieje sposób, aby to wyłączyć?
Odpowiedzi:
Tak, wystarczy użyć
JSON_UNESCAPED_SLASHES
flagi.Jeśli nie masz pod ręką PHP 5.4, wybierz jedną z wielu istniejących funkcji i zmodyfikuj je do swoich potrzeb, np. Http://snippets.dzone.com/posts/show/7487 (kopia archiwalna) .
Przykładowe demo
Przykładowe dane wyjściowe:
źródło
strip_slashes
i dla JS phpjs.org/functions/stripslashes\/
jako prawidłową sekwencję ucieczki/
) , zobacz również stackoverflow.com/a/10210367/367456 .JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
domyślna musi być, a nie (dziwne) opcja ... Jak to powiedzieć do php-deweloperów?Tak , ale nie rób tego - unikanie cięć do przodu to dobra rzecz . W przypadku używania
<script>
tagów JSON wewnątrz tagów konieczne jest, aby</script>
gdziekolwiek - nawet wewnątrz ciągu znaków - zakończył tag skryptu.W zależności od tego, gdzie jest używany JSON, nie jest to konieczne, ale można je bezpiecznie zignorować.
źródło
"\/"
jest dokładnie taka sama jak wartość ciągu"/"
- i działający parser JSON potraktuje ją jako taką. Ta sama zasada dotyczy ciągów javascript, więc podawanie JSON jako kodu javascript również nie sprawi żadnych problemów. Dziwię się, że PHP ma nawetJSON_UNESCAPED_SLASHES
flagę.Z drugiej strony miałem problem z potwierdzaniem przez PHPUNIT, że adresy URL były zawarte w adresie URL, który był kodowany w formacie json_encoded lub równe temu -
moje oczekiwane:
http://localhost/api/v1/admin/logs/testLog.log
zostanie zakodowany do:
http:\/\/localhost\/api\/v1\/admin\/logs\/testLog.log
Jeśli chcesz zrobić porównanie, przekształcając adres URL za pomocą:
addcslashes($url, '/')
pozwoliło na prawidłowe wyjście podczas moich porównań.
źródło
Musiałem zmierzyć się z sytuacją jako taką i po prostu z
zadziałało dla mnie.
źródło
Nie musisz uciekać przed ukośnikami! HTML5 i JS pozwalają na użycie „cudzysłowu” oraz „cudzysłowu”. Więc w JSON wpisuję:
Zobacz stronę internetową ev.bingo jako roboczy przykład: "v4": ["Audi e-tron Q4 Sportback w pełni wykorzystuje modułową platformę napędu elektrycznego MEPP, która jest wspólna dla Grupy Volkswagen"],
źródło