JSON och BSON kan bara koda/avkoda giltiga UTF-8-strängar, om din data (ingår indata) inte är UTF-8 måste du konvertera den innan du skickar den till något JSON-beroende system, så här:
$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
Personligen föredrar jag det första alternativet, se iconv()
manualsida. Andra alternativ inkluderar:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Du bör alltid se till att dina strängar är UTF-8-kodade, även de som användaren skickat in, men sedan du nämnde att du migrerar från MySQL till MongoDB, har du försökt exportera din nuvarande databas till CSV och använda importskripten som kommer med Mongo? De borde hantera det här...
EDIT: Jag nämnde att BSON bara kan hantera UTF-8, men jag är inte säker på om detta är exakt sant, jag har en vag uppfattning om att BSON använder UTF-16 eller UTF-32 för att koda/avkoda data, men jag kan inte kontrollera nu.