utf8
MySQL znaková sada ve skutečnosti není UTF-8 , je to podmnožina UTF-8 podporující pouze základní rovinu (znaky až do U+FFFF). Většina emotikonů používá kódové body vyšší než U+FFFF. utf8mb4
MySQL je skutečné UTF-8 který dokáže zakódovat všechny tyto kódové body. Mimo MySQL neexistuje nic takového jako „utf8mb4“, existuje pouze UTF-8. Takže:
Opět žádná taková věc jako "utf8mb4". Požadavky HTTP POST podporují všechny nezpracované bajty, pokud váš klient odesílá data v kódování UTF-8, jste v pořádku.
Ano.
Bože ne, použij raw UTF-8 (utf8mb4
) za všechno, co je svaté.
No, to je tvůj problém; přesměrování vašich dat přes utf8
MySQL znaková sada zahodí všechny znaky nad U+FFFF. Použijte utf8mb4
celou cestu přes MySQL.
Budete muset specifikovat, co to přesně znamená. Funkce JSON PHP by měly být schopny zpracovat jakýkoli kód Unicode v pohodě, pokud je platný UTF-8:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀