Json_encode Menambah Backslashes: Membongkar Misteri
Dalam bidang JavaScript, json_encode telah lama menjadi sekutu yang dipercayai untuk pengekodan data ke dalam format JSON . Walau bagaimanapun, sesetengah pembangun telah menemui fenomena yang tidak dijangka di mana json_encode memperkenalkan garis miring ke belakang ke dalam output.
Teka-teki Memuat Naik
Satu kejadian sedemikian berlaku apabila menggunakan json_encode untuk mengembalikan data JSON selepas muat naik fail. Pertimbangkan kod berikut:
print_r($result); // Associative array $encoded_result = json_encode($result); // Valid JSON echo $encoded_result;
The Unexplained Backslashes
Mengejutkan pembangun, JSON yang terhasil termasuk backslash yang tidak diingini:
{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
Menunjukkan dengan tepat Puncanya
Siasatan awal mendedahkan bahawa garis miring ke belakang ditambah di suatu tempat antara json_encode dan penghuraian data JSON penyemak imbas.
alert(data.toSource()); // Result: invalid JSON with added "status:200"
Pembolehubah Tersembunyi
Peperiksaan yang lebih dekat menemui punca yang tidak dijangka: Peristiwa pengikat Plupload.
uploader.bind('FileUploaded', function(up, file, data) { alert(data.toSource()); $('#' + file.id + " b").html("100%"); });
Plupload, pustaka muat naik fail yang popular, nampaknya memanipulasi data yang dikembalikan, menambah sifat "status:200" dan mengekod garis miring.
Penyelesaian: Melarikan Diri daripada Tebasan
Untuk menggagalkan perkara yang tidak diingini garis miring ke belakang, kod tersebut telah diubah suai untuk memasukkan pilihan "JSON_UNESCAPED_SLASHES" dalam panggilan fungsi json_encode:
$encoded_result = json_encode($result, JSON_UNESCAPED_SLASHES);
Pilihan ini secara berkesan melumpuhkan pelepasan garis miring ke hadapan, menghasilkan output JSON yang diingini:
{"logo_url":"http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
Membuka tabir Kebenaran
Sebagai kesimpulan, penambahan garis miring ke belakang dalam output json_encode telah dikaitkan dengan manipulasi data yang tidak disengajakan oleh peristiwa Plupload bind. Dengan memasukkan pilihan "JSON_UNESCAPED_SLASHES", pembangun boleh menghalang watak melarikan diri yang tidak diingini ini daripada mengganggu data JSON mereka.
Atas ialah kandungan terperinci Mengapakah `json_encode` menambah garis miring ke belakang dan bagaimana saya boleh menghalangnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!