Powód tego „ucieka” mi.
JSON ucieka przed ukośnikiem, więc skrót {a: "a/b/c"}
jest serializowany jak {"a":"a\/b\/c"}
zamiast {"a":"a/b/c"}
.
Dlaczego?
javascript
json
Jason S.
źródło
źródło
json_encode()
ucieka ukośniki domyślnie, ale ma tęJSON_UNESCAPED_SLASHES
opcję, począwszy od PHP 5.4.0 (marzec 2012)'</'
:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Odpowiedzi:
JSON nie wymaga tego, pozwala ci to zrobić. Pozwala także użyć „\ u0061” dla „A”, ale nie jest to wymagane. Zezwalanie
\/
pomaga przy osadzaniu JSON w<script>
znaczniku, co nie pozwala na</
wewnętrzne ciągi, jak wskazuje Seb.Niektóre API ASP.NET Ajax / JSON firmy Microsoft używają tej luki, aby dodać dodatkowe informacje, np. Data i godzina zostaną wysłane jako
"\/Date(milliseconds)\/"
. (Fuj)źródło
/
nie jest wymagana , jest dozwolona , aby ułatwić korzystanie z JSON. Jeśli nie chcesz uciec/
, nie rób tego.Specyfikacja JSON mówi, że MOŻESZ uciec przed ukośnikiem, ale nie musisz.
źródło
Zadałem to samo pytanie jakiś czas temu i sam musiałem na nie odpowiedzieć. Oto, co wymyśliłem:
źródło
PHP domyślnie unika ukośników do przodu i prawdopodobnie dlatego tak często się pojawia. Nie jestem pewien, dlaczego, ale być może dlatego, że osadzenie łańcucha
"</script>"
wewnątrz<script>
tagu jest uważane za niebezpieczne.Funkcję tę można wyłączyć, przekazując
JSON_UNESCAPED_SLASHES
flagę, ale większość programistów nie będzie jej używać, ponieważ oryginalny wynik jest już prawidłowy JSON.źródło
Brzydki PHP!
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
Musi być domyślny, a nie (dziwne) opcja ... Jak to powiedzieć do php-deweloperów?Domyślna musi być najbardziej częste stosowanie, a (bieżące) najpowszechniej stosowanych standardów jako UTF-8. Ile fragmentów kodu PHP w Githubie lub w innym miejscu potrzebuje tej dziwnej funkcji „osadzonej w HTML”?
źródło
'\/' === '/'
zwraca true. Radziłbym trzymać się faktów. Większość ludzi jest w stanie poradzić sobie z kilkoma niespójnymi nazwami funkcji. Tylko dlatego, że nie widzisz przeszłości, co nie czyni PHP złym narzędziem.