JSON i BSON mogą kodować / dekodować tylko prawidłowe ciągi znaków UTF-8, jeśli twoje dane (włączone dane wejściowe) nie są w UTF-8, musisz je przekonwertować przed przekazaniem do dowolnego systemu zależnego od JSON, na przykład:
$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
Osobiście wolę pierwszą opcję, zobacz iconv()
strony podręcznika. Inne alternatywy to:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Zawsze powinieneś upewnić się, że twoje łańcuchy są zakodowane w UTF-8, nawet te przesłane przez użytkowników, jednak skoro wspomniałeś, że migrujesz z MySQL do MongoDB, czy próbowałeś wyeksportować bieżącą bazę danych do CSV i użyć skryptów importu, które są z Mongo? Powinni się tym zająć...
EDYTUJ: Wspomniałem, że BSON obsługuje tylko UTF-8, ale nie jestem pewien, czy to dokładnie prawda, mam niejasny pomysł, że BSON używa UTF-16 lub UTF-32 do kodowania / dekodowania danych, ale nie mogę sprawdzić teraz.