JSON et BSON ne peuvent encoder/décoder que des chaînes UTF-8 valides, si vos données (entrée incluse) ne sont pas UTF-8, vous devez les convertir avant de les transmettre à tout système dépendant de JSON, comme ceci :
$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
Personnellement je préfère la première option, voir le iconv()
page de manuel. D'autres alternatives incluent :
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Vous devez toujours vous assurer que vos chaînes sont encodées en UTF-8, même celles soumises par l'utilisateur, mais depuis que vous avez mentionné que vous migrez de MySQL vers MongoDB, avez-vous essayé d'exporter votre base de données actuelle vers CSV et d'utiliser les scripts d'importation qui viennent avec Mongo ? Ils devraient gérer ça...
MODIF : J'ai mentionné que BSON ne peut gérer que UTF-8, mais je ne sais pas si c'est exactement vrai, j'ai une vague idée que BSON utilise UTF-16 ou UTF-32 pour encoder/décoder des données, mais je ne peux pas vérifier maintenant.