JSON и BSON могут кодировать / декодировать только допустимые строки UTF-8, если ваши данные (включая входные данные) не являются UTF-8, вам необходимо преобразовать их перед передачей в любую зависимую от JSON систему, например:
$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
Лично я предпочитаю первый вариант, см. Справочную страницу iconv()
. Другие альтернативы включают в себя:
Вы должны всегда проверять, чтобы ваши строки были в кодировке UTF-8, даже если они были отправлены пользователем, однако, поскольку вы упомянули, что переходите с MySQL на MongoDB, вы пытались экспортировать свою текущую базу данных в CSV и использовать импорт скрипты которые идут с монго? Они должны справиться с этим ...
РЕДАКТИРОВАТЬ: Я упоминал, что BSON может обрабатывать только UTF-8, но я не уверен, что это действительно так, у меня есть смутное представление, что BSON использует UTF-16 или UTF-32 кодировать / декодировать данные, но я не могу проверить сейчас.