utf8
MySQL charset sebenarnya bukan UTF-8 , ini adalah subset dari UTF-8 yang hanya mendukung bidang dasar (karakter hingga U+FFFF). Sebagian besar emoji menggunakan poin kode lebih tinggi dari U+FFFF. utf8mb4
MySQL adalah UTF-8 yang sebenarnya yang dapat mengkodekan semua poin kode tersebut. Di luar MySQL tidak ada yang namanya "utf8mb4", hanya ada UTF-8. Jadi:
Sekali lagi, tidak ada yang namanya "utf8mb4". Permintaan HTTP POST mendukung byte mentah apa pun, jika klien Anda mengirim data yang disandikan UTF-8, Anda baik-baik saja.
Ya.
Astaga, gunakan UTF-8 mentah (utf8mb4
) untuk semua yang kudus.
Nah, ada masalah Anda; menyalurkan data Anda melalui utf8
MySQL charset akan membuang semua karakter di atas U+FFFF. Gunakan utf8mb4
sepenuhnya melalui MySQL.
Anda harus menentukan apa artinya dengan tepat. Fungsi JSON PHP harus dapat menangani titik kode Unicode apa pun dengan baik, selama itu UTF-8 yang valid:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀