JSON y BSON solo pueden codificar/decodificar cadenas UTF-8 válidas, si sus datos (entrada incluida) no son UTF-8, debe convertirlos antes de pasarlos a cualquier sistema dependiente de JSON, como este:
$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
Personalmente prefiero la primera opción, vea el iconv()
página de manuales. Otras alternativas incluyen:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Siempre debe asegurarse de que sus cadenas estén codificadas en UTF-8, incluso las enviadas por el usuario; sin embargo, dado que mencionó que está migrando de MySQL a MongoDB, ¿ha intentado exportar su base de datos actual a CSV y usar los scripts de importación que vienen? con Mongo? Deberían encargarse de esto...
EDITAR: Mencioné que BSON solo puede manejar UTF-8, pero no estoy seguro de si esto es exactamente cierto, tengo una vaga idea de que BSON usa UTF-16 o UTF-32 para codificar/decodificar datos, pero no puedo verificar ahora.