MySQLのutf8
文字セットは実際にはUTF-8ではありません 、基本プレーン(U + FFFFまでの文字)のみをサポートするUTF-8のサブセットです。ほとんどの絵文字は、U+FFFFよりも高いコードポイントを使用します。 MySQLのutf8mb4
実際のUTF-8 これらすべてのコードポイントをエンコードできます。 MySQL以外には、「utf8mb4」のようなものはなく、UTF-8だけがあります。だから:
繰り返しますが、「utf8mb4」のようなものはありません。クライアントがUTF-8でエンコードされたデータを送信する場合、HTTPPOSTリクエストはすべてのrawバイトをサポートします。
はい。
いいえ、生のUTF-8(utf8mb4
を使用してください )聖なるものすべてのために。
さて、あなたの問題があります。 MySQLのutf8
を介してデータをチャネリングする charsetは、U+FFFFより上の文字をすべて破棄します。 utf8mb4
を使用する MySQLを介してずっと。
それが何を意味するのかを正確に指定する必要があります。 PHPのJSON関数は、有効なUTF-8である限り、任意のUnicodeコードポイントを問題なく処理できるはずです。
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀