JSON og BSON kan kun kode/afkode gyldige UTF-8-strenge, hvis dine data (inkluderet input) ikke er UTF-8, skal du konvertere dem, før de overføres til et hvilket som helst JSON-afhængigt system, sådan her:
$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
Personligt foretrækker jeg den første mulighed, se iconv()
manual side. Andre alternativer omfatter:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Du bør altid sikre dig, at dine strenge er UTF-8-kodede, selv de brugerindsendte, men siden du nævnte, at du migrerer fra MySQL til MongoDB, har du prøvet at eksportere din nuværende database til CSV og bruge de import-scripts, der kommer med Mongo? De burde klare dette...
EDIT: Jeg nævnte, at BSON kun kan håndtere UTF-8, men jeg er ikke sikker på, om dette er nøjagtigt sandt, jeg har en vag idé om, at BSON bruger UTF-16 eller UTF-32 til at kode/afkode data, men jeg kan ikke kontrollere nu.