JSON và BSON chỉ có thể mã hóa / giải mã các chuỗi UTF-8 hợp lệ, nếu dữ liệu của bạn (đầu vào được bao gồm) không phải là UTF-8, bạn cần chuyển đổi nó trước khi chuyển nó sang bất kỳ hệ thống phụ thuộc JSON nào, như sau:
$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
Cá nhân tôi thích tùy chọn đầu tiên hơn, hãy xem iconv()
trang hướng dẫn sử dụng. Các lựa chọn thay thế khác bao gồm:
-
mb_convert_encoding()
-
utf8_encode(utf8_decode($string))
Bạn phải luôn đảm bảo các chuỗi của mình được mã hóa UTF-8, ngay cả những chuỗi do người dùng gửi, tuy nhiên vì bạn đã đề cập rằng bạn đang di chuyển từ MySQL sang MongoDB, bạn đã thử xuất cơ sở dữ liệu hiện tại của mình sang CSV và sử dụng các tập lệnh nhập đi kèm chưa với Mongo? Họ nên xử lý việc này ...
CHỈNH SỬA: Tôi đã đề cập rằng BSON chỉ có thể xử lý UTF-8, nhưng tôi không chắc liệu điều này có chính xác không, tôi có một ý tưởng mơ hồ rằng BSON sử dụng UTF-16 hoặc UTF-32 để mã hóa / giải mã dữ liệu, nhưng tôi không thể kiểm tra. bây giờ.