Saya menulis layanan web yang menggunakan json untuk mewakili sumber dayanya, dan saya agak terjebak memikirkan cara terbaik untuk menyandikan json. Membaca json rfc ( http://www.ietf.org/rfc/rfc4627.txt ) jelas bahwa pengkodean yang disukai adalah utf-8. Tetapi rfc juga menjelaskan mekanisme pelolosan string untuk menentukan karakter. Saya berasumsi ini umumnya akan digunakan untuk melarikan diri karakter non-ascii, sehingga membuat ascii yang valid utf-8.
Jadi katakanlah saya memiliki string json yang berisi karakter unicode (kode-poin) yang non-ascii. Haruskah webservice saya hanya mengkodekan utf-8 dan mengembalikannya, atau haruskah ia keluar dari semua karakter non-ascii dan mengembalikan ascii murni?
Saya ingin browser dapat menjalankan hasil menggunakan jsonp atau eval. Apakah itu mempengaruhi keputusan? Pengetahuan saya tentang berbagai dukungan javascript browser untuk utf-8 masih kurang.
EDIT: Saya ingin mengklarifikasi bahwa perhatian utama saya tentang cara menyandikan hasil sebenarnya tentang penanganan hasil di browser. Apa yang saya baca menunjukkan bahwa browser mungkin sensitif terhadap pengkodean khususnya saat menggunakan JSONP. Saya belum menemukan info yang benar-benar bagus tentang masalah ini, jadi saya harus mulai melakukan beberapa pengujian untuk melihat apa yang terjadi. Idealnya saya hanya ingin menghindari beberapa karakter yang diperlukan dan hanya menyandikan hasil utf-8.
sumber
Saya punya masalah di sana. Ketika I JSON menyandikan string dengan karakter seperti "é", setiap browser akan mengembalikan "é" yang sama, kecuali IE yang akan mengembalikan "\ u00e9".
Kemudian dengan PHP json_decode () akan gagal jika menemukan "é", jadi untuk Firefox, Opera, Safari dan Chrome, saya harus memanggil utf8_encode () sebelum json_decode ().
Catatan: dengan pengujian saya, IE dan Firefox menggunakan objek JSON asli mereka, browser lain menggunakan json2.js.
sumber
utf8_encode()
, php.net/manual/en/function.utf8-encode.phpASCII tidak ada di dalamnya lagi. Menggunakan pengkodean UTF-8 berarti Anda tidak menggunakan pengkodean ASCII. Untuk apa Anda harus menggunakan mekanisme pelolosan adalah apa yang dikatakan RFC:
sumber
Saya menghadapi masalah yang sama. Ini bekerja untuk saya. Tolong periksa ini.
json_encode($array,JSON_UNESCAPED_UNICODE);
sumber
FYI, RFC 4627 bukan lagi spesifikasi JSON resmi. Itu usang pada tahun 2014 oleh RFC 7159 , yang kemudian dihilangkan pada tahun 2017 oleh RFC 8259 , yang merupakan spesifikasi saat ini.
RFC 8259 menyatakan:
sumber
Saya memiliki masalah serupa dengan é char ... Saya pikir komentar "ada kemungkinan bahwa teks yang Anda berikan bukan UTF-8" mungkin dekat dengan tanda di sini. Saya merasa pemeriksaan default dalam contoh saya adalah sesuatu yang lain sampai saya menyadari dan berubah menjadi utf8 ... masalah adalah datanya sudah ada di sana, jadi tidak yakin apakah itu mengubah data atau tidak ketika saya mengubahnya, ditampilkan dengan baik di mysql meja kerja. Hasil akhirnya adalah bahwa php tidak akan menyandikan data, hanya mengembalikan false. Tidak peduli browser apa yang Anda gunakan sebagai server yang menyebabkan masalah saya, php tidak akan mengurai data ke utf8 jika karakter ini ada. Seperti saya katakan tidak yakin apakah itu karena mengubah skema ke utf8 setelah data ada atau hanya bug php. Dalam kasus ini digunakan
json_encode(utf8_encode($string));
sumber