MySQL's utf8
tegnsæt er faktisk ikke UTF-8 , det er en delmængde af UTF-8, der kun understøtter grundplanet (tegn op til U+FFFF). De fleste emoji bruger kodepunkter højere end U+FFFF. MySQL's utf8mb4
er faktisk UTF-8 som kan kode alle disse kodepunkter. Uden for MySQL er der ikke noget som "utf8mb4", der er bare UTF-8. Så:
Igen, ikke noget som "utf8mb4". HTTP POST-anmodninger understøtter alle rå bytes, hvis din klient sender UTF-8-kodede data, har du det fint.
Ja.
Gud nej, brug rå UTF-8 (utf8mb4
) for alt det hellige.
Nå, der er dit problem; kanalisering af dine data gennem MySQL's utf8
charset vil kassere alle tegn over U+FFFF. Brug utf8mb4
hele vejen gennem MySQL.
Du bliver nødt til at specificere, hvad det præcis betyder. PHP's JSON-funktioner burde være i stand til at håndtere ethvert Unicode-kodepunkt fint, så længe det er gyldigt UTF-8:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀