Alasan untuk ini "lolos" saya.
JSON lolos dari garis miring, jadi hash {a: "a/b/c"}
diserialisasi sebagai {"a":"a\/b\/c"}
gantinya {"a":"a/b/c"}
.
Mengapa?
javascript
json
Jason S
sumber
sumber
json_encode()
lolos dari garis miring secara default, tetapi memilikiJSON_UNESCAPED_SLASHES
opsi mulai dari PHP 5.4.0 (Maret 2012)'</'
:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Jawaban:
JSON tidak mengharuskan Anda untuk melakukan itu, itu memungkinkan Anda untuk melakukan itu. Ini juga memungkinkan Anda untuk menggunakan "\ u0061" untuk "A", tetapi itu tidak wajib. Mengizinkan
\/
membantu saat menyematkan JSON dalam<script>
tag, yang tidak memungkinkan</
string di dalam, seperti yang ditunjukkan Seb.Beberapa Microsoft ASP.NET Ajax / JSON API menggunakan celah ini untuk menambahkan informasi tambahan, misalnya, suatu datetime akan dikirim sebagai
"\/Date(milliseconds)\/"
. (Yuck)sumber
/
tidak diperlukan , diizinkan , untuk memudahkan penggunaan JSON. Jika Anda tidak ingin melarikan diri/
, maka jangan.Spesifikasi JSON mengatakan Anda BISA melarikan diri dari garis miring, tetapi Anda tidak harus melakukannya.
sumber
Saya menanyakan pertanyaan yang sama beberapa waktu lalu dan harus menjawabnya sendiri. Inilah yang saya pikirkan:
sumber
PHP lolos dari garis miring ke depan secara default yang mungkin mengapa hal ini sering muncul. Saya tidak yakin mengapa, tetapi mungkin karena menyematkan string ke
"</script>"
dalam<script>
tag dianggap tidak aman.Fungsionalitas ini dapat dinonaktifkan dengan melewati
JSON_UNESCAPED_SLASHES
flag, tetapi sebagian besar pengembang tidak akan menggunakan ini karena hasil asli sudah JSON yang valid.sumber
PHP yang jelek!
The
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
harus default, bukan (aneh) pilihan ... Bagaimana mengatakan kepada php-pengembang?The bawaan HARUS penggunaan yang paling sering, dan (saat ini) yang paling banyak digunakan standar sebagai UTF8. Berapa banyak fragmen kode PHP di Github atau tempat lain yang memerlukan fitur "embedded in HTML" eksoctic ini?
sumber
'\/' === '/'
mengembalikan true. Saya akan menyarankan Anda untuk tetap berpegang pada fakta. Kebanyakan orang mampu mengatasi beberapa nama fungsi yang tidak konsisten. Hanya karena Anda tidak dapat melihat masa lalu yang tidak menjadikan PHP alat yang buruk.