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()
страница наръчник. Други алтернативи включват:
mb_convert_encoding()
utf8_encode(utf8_decode($string))
Винаги трябва да се уверите, че вашите низове са кодирани с UTF-8, дори тези, изпратени от потребителя, но тъй като споменахте, че мигрирате от MySQL към MongoDB, опитали ли сте да експортирате текущата си база данни в CSV и да използвате скриптовете за импортиране, които идват с Монго? Те трябва да се справят с това...
РЕДАКТИРАНЕ: Споменах, че BSON може да обработва само UTF-8, но не съм сигурен дали това е точно вярно, имам бегла идея, че BSON използва UTF-16 или UTF-32 за кодиране/декодиране на данни, но не мога да проверя сега.