utf8
di MySQL charset non è effettivamente UTF-8 , è un sottoinsieme di UTF-8 che supporta solo il piano di base (caratteri fino a U+FFFF). La maggior parte delle emoji utilizza punti di codice superiori a U+FFFF. utf8mb4
di MySQL è attuale UTF-8 che può codificare tutti quei punti di codice. Al di fuori di MySQL non esiste "utf8mb4", c'è solo UTF-8. Quindi:
Ancora una volta, niente come "utf8mb4". Le richieste HTTP POST supportano qualsiasi byte grezzo, se il tuo client invia dati con codifica UTF-8 stai bene.
Sì.
Dio no, usa UTF-8 grezzo (utf8mb4
) per tutto ciò che è santo.
Bene, c'è il tuo problema; canalizzare i tuoi dati attraverso utf8
di MySQL charset scarterà tutti i caratteri sopra U+FFFF. Usa utf8mb4
attraverso MySQL.
Dovrai specificare cosa significa esattamente. Le funzioni JSON di PHP dovrebbero essere in grado di gestire perfettamente qualsiasi punto di codice Unicode, purché sia UTF-8 valido:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀