JSON dan BSON hanya dapat menyandikan / mendekode string UTF-8 yang valid, jika data Anda (input yang disertakan) bukan UTF-8, Anda perlu mengonversinya sebelum meneruskannya ke sistem yang bergantung pada JSON, seperti ini:
$string = iconv('UTF-8', 'UTF-8//IGNORE', $string); // or
$string = iconv('UTF-8', 'UTF-8//TRANSLIT', $string); // or even
$string = iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string); // not sure how this behaves
Secara pribadi saya lebih suka opsi pertama, lihat iconv()
halaman manual. Alternatif lain termasuk:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Anda harus selalu memastikan string Anda dikodekan UTF-8, bahkan yang dikirim oleh pengguna, namun karena Anda menyebutkan bahwa Anda bermigrasi dari MySQL ke MongoDB, sudahkah Anda mencoba mengekspor database Anda saat ini ke CSV dan menggunakan skrip impor yang datang dengan Mongo? Mereka harus menangani ini...
EDIT: Saya menyebutkan bahwa BSON hanya dapat menangani UTF-8, tetapi saya tidak yakin apakah ini benar, saya memiliki gagasan yang kabur bahwa BSON menggunakan UTF-16 atau UTF-32 untuk menyandikan / mendekode data, tetapi saya tidak dapat memeriksa sekarang.