Emoji表情アイコンiOSとPHP間の通信およびMySQLストレージ
原文住所:http://wpceo.com/supporting-emoji-on-php-mysql/
あるiOSプロジェクトでは、ユーザー情報、コメントなどのユーザーデータを保存するサーバが必要です.私たちのサーバ側はPHP+MySQLの組み合わせを使用しています.テストの過程で、ユーザーがiOS側にEmojiの表情を入力してサーバーに提出した後、PHPはMySQLデータベースに正しく保存できず、文字化けしの問題に遭遇することを発見しました.以下は原因の探析と解決方法である.
Emojiの歴史といえば、それは源流が長いと言えますが、iOSシステムにおけるEmojiの変遷史を簡単に紹介します.いつからか、日本人はEmojiの表情アイコンを出すのが好きで、そこで日本のキャリアDoCoMo、KDDI、SoftBankは自分のEmoji文字集を出しました.これらの文字セットでは、1つのEmojiの表情が実際にはUTF 8の文字であることは、QQや微信の表情とは異なり、ユーザーがメールを送るときに1つのEmojiの「画像」が1文字しか占めていないので、かなり便利です.アップルのiOSとMac OS XシステムにはApple Color Emoji(Appleカラー表情記号)のフォントを内蔵してEmoji表情を表示しています.iOSにはEmoji入力キーボードがあり、様々なEmoji表情アイコンを入力できます.Mac OS XではOption+Command+Tを使って入力キーボードから「表情記号」入力を呼び出し、Mac OS Xのフォントファイルは
技術的には、単一のEmoji表情は実際にはUTF 8で符号化された文字であり、アップルはiOS 4でEmojiの表示をサポートし始め、当時はSoftBankのスキームを使用していた.日本の3つのキャリアの間では、同じ表情を表すUTF 8コードが異なり(コントラストリストを参照)、正確に表示するには変換をしなければならない.同じ表情の笑顔を例にとると、SoftBankは
iOS 4のソリューション
しかし、唯一の利点は、このときのEmojiアイコンごとに、3バイトのUTF 8文字で符号化されることです.余談ですが、PHPの開発が始まったばかりの頃、中国語がUTF 8文字セットで3バイトを占めていたことはよく知られていました.iOSとWebサーバ間の通信方式に戻ると、iOSのユーザーが入力したEmojiの表情を直接PHPでMySQLデータベースに保存することができ、iOSに表示されていれば、直接iOSにデータを渡すことができ、クライアントは表情アイコンを正しく表示することができるはずだ.iOS側にユーザーが入力した表情をWeb側に表示すれば、Emoji文字を対応する画像に変換する必要があります(もちろんEmoji対応のMac OS Xシステムは、WebページCSSの
iOS 5のソリューション
iOS 5からアップルは標準のUnifiedコードのEmoji表情をサポートし始めた.この最大の利点は、仕様を統一し、ユーザーと開発者を便利にすることです.しかし,Web開発者はウェブサイトを開発する際にいくつかの問題に直面し,従来はEmoji表情をデータベースに直接格納していたが,現在では文字化けしてしまう.これは、Unified規格を採用している単一のEmoji文字は一般的に4バイトであり、MySQLデータベースutf 8文字セットでサポートされている各文字の3バイトの制限を超え、データベースに格納された後に文字化けしたり、データを破壊したりするためである.
この問題を解決するには、データベースに格納する前に、Emoji文字ごとにUBBコードに変換したり、HTMLのエスケープ文字などの他の認識可能な形式に変換したりするのが最も便利です.太陽記号を例にとると、Unified Emojiは
もう一つの方法は、SoftBankスキームを採用した単一のEmoji表情が3バイトを占有し、直接データベースに保存できるので、Unified EmojiをSoftBank Emojiフォーマットに変換することができ、データベースに保存しても問題はありません.
もう一つの方法はMySQL自身から解決します.MySQL 5.5.3.3から、MySQLはutf 8 mb 4の文字セットをサポートし、この文字セットは4バイトのUTF 8符号化の文字をサポートすることができる.utf 8 mb 4文字セットはutf 8文字列を完全に下に互換性を持つことができる.データストレージでは、通常の中国語文字がデータベースに格納されている場合でも3バイトを占有し、Unified Emojiの表情が格納されている場合、自動的に4バイトを占有します.したがって、入出力時に文字化けしの問題は発生しません.MySQLのこの機能を使用するには、まずMySQLを5.5.3以上のバージョンにアップグレードする必要があります.次に、utf 8 mb 4のデータ構造の文字セットを変更する必要があります.
iOS 6のソリューション
アップルはiOS 6とMac OS X 10.8で300以上のEmoji表情を追加したが、SoftBank符号化は徐々に歴史的に淘汰され、対応するアップグレードがなくなったため、前述したUnified EmojiをSoftBank Emojiに変換してデータベースに保存する案は時代遅れになった.
最終的なソリューション
そんなことを言っても、結局は解決策をまとめてまとめなければなりません.
データベースに保存されている形態から、UBBやHTMLエスケープ文字などの代替方法で保存するか、Emoji文字をデータベースで直接保存します.Emoji文字を直接保存する場合は、MySQLを5.5.3以上にアップグレードし、utf 8 mb 4文字セットを使用する必要があります.代替方法を使用すると、データベースをアップグレードする必要がなく、既存のサーバに影響を及ぼさず、比較的手間が省けます.
ユーザー入力の面では、ある有名なポータルニュースクライアントを例に、Web、iOS、アンドロイドなど、よく見られるいくつかのプラットフォームがあります.Web側は主にユーザーにアイコンをクリックしてEmojiの表情を入力させ、テキストボックスにUBBコード
Web側表示では,各プラットフォームの互換性を考慮して,Emoji表情を画像で出力するのが最適である.データベースに保存されている形態が何であれ、それを画像に変換するには対応するテーブルが必要です.Emoji for PHPはiOS 5の500以上の表情のサポートを実現しているが、iOS 6に追加された300以上の表情は提供されていない.私はすでに対応関係をしていますが、コードを整理していないので、しばらくは出せません.
iOS側の表示では、ユーザーがiOS 5以上にアップグレードされていることから、オリジナルサポートのUnified Emojiが表示されるのは当然です.アンドロイドや他のモバイルプラットフォームクライアントでは、しばらく研究したことがありませんが、画像を表示するのが良い選択だと思います.
あるiOSプロジェクトでは、ユーザー情報、コメントなどのユーザーデータを保存するサーバが必要です.私たちのサーバ側はPHP+MySQLの組み合わせを使用しています.テストの過程で、ユーザーがiOS側にEmojiの表情を入力してサーバーに提出した後、PHPはMySQLデータベースに正しく保存できず、文字化けしの問題に遭遇することを発見しました.以下は原因の探析と解決方法である.
Emojiの歴史といえば、それは源流が長いと言えますが、iOSシステムにおけるEmojiの変遷史を簡単に紹介します.いつからか、日本人はEmojiの表情アイコンを出すのが好きで、そこで日本のキャリアDoCoMo、KDDI、SoftBankは自分のEmoji文字集を出しました.これらの文字セットでは、1つのEmojiの表情が実際にはUTF 8の文字であることは、QQや微信の表情とは異なり、ユーザーがメールを送るときに1つのEmojiの「画像」が1文字しか占めていないので、かなり便利です.アップルのiOSとMac OS XシステムにはApple Color Emoji(Appleカラー表情記号)のフォントを内蔵してEmoji表情を表示しています.iOSにはEmoji入力キーボードがあり、様々なEmoji表情アイコンを入力できます.Mac OS XではOption+Command+Tを使って入力キーボードから「表情記号」入力を呼び出し、Mac OS Xのフォントファイルは
/System/Library/Fonts/Apple Color Emoji.ttf
.著作権の要素を抜きにして、このファイルをWindowsのライブラリフォルダにコピーすると、WindowsでもEmojiの表示がサポートされます.技術的には、単一のEmoji表情は実際にはUTF 8で符号化された文字であり、アップルはiOS 4でEmojiの表示をサポートし始め、当時はSoftBankのスキームを使用していた.日本の3つのキャリアの間では、同じ表情を表すUTF 8コードが異なり(コントラストリストを参照)、正確に表示するには変換をしなければならない.同じ表情の笑顔を例にとると、SoftBankは
U+E04A
、KDDIは U+E488
. iOS 4のソリューション
しかし、唯一の利点は、このときのEmojiアイコンごとに、3バイトのUTF 8文字で符号化されることです.余談ですが、PHPの開発が始まったばかりの頃、中国語がUTF 8文字セットで3バイトを占めていたことはよく知られていました.iOSとWebサーバ間の通信方式に戻ると、iOSのユーザーが入力したEmojiの表情を直接PHPでMySQLデータベースに保存することができ、iOSに表示されていれば、直接iOSにデータを渡すことができ、クライアントは表情アイコンを正しく表示することができるはずだ.iOS側にユーザーが入力した表情をWeb側に表示すれば、Emoji文字を対応する画像に変換する必要があります(もちろんEmoji対応のMac OS Xシステムは、WebページCSSの
font-family
プロパティが直接表示されます).Emoji for PHPコンポーネントは、各種Unified、DoCoMo、KDDI、SoftBank、Google符号化間で容易に変換できる.iOS 5のソリューション
iOS 5からアップルは標準のUnifiedコードのEmoji表情をサポートし始めた.この最大の利点は、仕様を統一し、ユーザーと開発者を便利にすることです.しかし,Web開発者はウェブサイトを開発する際にいくつかの問題に直面し,従来はEmoji表情をデータベースに直接格納していたが,現在では文字化けしてしまう.これは、Unified規格を採用している単一のEmoji文字は一般的に4バイトであり、MySQLデータベースutf 8文字セットでサポートされている各文字の3バイトの制限を超え、データベースに格納された後に文字化けしたり、データを破壊したりするためである.
この問題を解決するには、データベースに格納する前に、Emoji文字ごとにUBBコードに変換したり、HTMLのエスケープ文字などの他の認識可能な形式に変換したりするのが最も便利です.太陽記号を例にとると、Unified Emojiは
U+2600
は、データベースに格納する際に、それを UBBコード [emoji]2600[/emoji]
保存、HTMLエスケープ文字も使用可能 ☀
貯蔵する.Webフロントエンドに表示されていれば、HTMLエスケープ文字で直接出力でき、UBBコードであればフォーラムなどユーザー入力を厳格に安全に検証する必要がある場所で使用しやすい.もう一つの方法は、SoftBankスキームを採用した単一のEmoji表情が3バイトを占有し、直接データベースに保存できるので、Unified EmojiをSoftBank Emojiフォーマットに変換することができ、データベースに保存しても問題はありません.
もう一つの方法はMySQL自身から解決します.MySQL 5.5.3.3から、MySQLはutf 8 mb 4の文字セットをサポートし、この文字セットは4バイトのUTF 8符号化の文字をサポートすることができる.utf 8 mb 4文字セットはutf 8文字列を完全に下に互換性を持つことができる.データストレージでは、通常の中国語文字がデータベースに格納されている場合でも3バイトを占有し、Unified Emojiの表情が格納されている場合、自動的に4バイトを占有します.したがって、入出力時に文字化けしの問題は発生しません.MySQLのこの機能を使用するには、まずMySQLを5.5.3以上のバージョンにアップグレードする必要があります.次に、utf 8 mb 4のデータ構造の文字セットを変更する必要があります.
utf8mb4_general_ci
.utf 8 mb 4はutf 8のスーパーセットであるため、utf 8からutf 8 mb 4にアップグレードするには何の問題もなく、直接アップグレードすればよい.gb 2312やgbkなどの他の文字セットから変換された場合は、データベースをバックアップする必要があります.その後、MySQLのプロファイルを変更します. /etc/my.cnf
、接続のデフォルト文字セットをutf 8 mb 4に変更し、自分で書いたPHPスクリプトであれば、データベースに接続した後にSQLを最初に実行することもできます. SET NAMES utf8mb4;
.この場合、PHPは正常にEmojiをデータベースに保存できるはずです.iOS 6のソリューション
アップルはiOS 6とMac OS X 10.8で300以上のEmoji表情を追加したが、SoftBank符号化は徐々に歴史的に淘汰され、対応するアップグレードがなくなったため、前述したUnified EmojiをSoftBank Emojiに変換してデータベースに保存する案は時代遅れになった.
最終的なソリューション
そんなことを言っても、結局は解決策をまとめてまとめなければなりません.
データベースに保存されている形態から、UBBやHTMLエスケープ文字などの代替方法で保存するか、Emoji文字をデータベースで直接保存します.Emoji文字を直接保存する場合は、MySQLを5.5.3以上にアップグレードし、utf 8 mb 4文字セットを使用する必要があります.代替方法を使用すると、データベースをアップグレードする必要がなく、既存のサーバに影響を及ぼさず、比較的手間が省けます.
ユーザー入力の面では、ある有名なポータルニュースクライアントを例に、Web、iOS、アンドロイドなど、よく見られるいくつかのプラットフォームがあります.Web側は主にユーザーにアイコンをクリックしてEmojiの表情を入力させ、テキストボックスにUBBコード
[emoji]2600[/emoji]
を直接入力することができる. の形式で表示されますが、Mac OS XやiOSモバイルWebサイトのユーザーが直接キーボードでEmoji文字を入力することも考えられます. textarea{font-family:"Apple Color Emoji","Arial";}
,Mac OS X上のChrome/Firefoxブラウザユーザーが表情を入力すると、黒い枠ではなく直接表示できるようにします.iOSクライアントは言うまでもなく、iOSが持っている表情キーボードをユーザーに直接使用させることができます.Android、Windows Phone、ブラックベリーなど他のプラットフォームでは、第三者の入力方式でEmojiの表情を入力するのが一般的です.ユーザーが入力したEmoji文字かUBBコードかは、サーバ側が処理する能力があるはずです.注目すべきは、SoftBankなどのEmoji文字セットが主流ではないかもしれませんが、中国でのユーザーの推定は少ないですが、微信のような多国籍界のアプリを作りたいなら、変換を追加して、まずいろいろな形式のEmoji文字をまずUnified Emojiに変換してみてはいかがでしょうか.Web側表示では,各プラットフォームの互換性を考慮して,Emoji表情を画像で出力するのが最適である.データベースに保存されている形態が何であれ、それを画像に変換するには対応するテーブルが必要です.Emoji for PHPはiOS 5の500以上の表情のサポートを実現しているが、iOS 6に追加された300以上の表情は提供されていない.私はすでに対応関係をしていますが、コードを整理していないので、しばらくは出せません.
iOS側の表示では、ユーザーがiOS 5以上にアップグレードされていることから、オリジナルサポートのUnified Emojiが表示されるのは当然です.アンドロイドや他のモバイルプラットフォームクライアントでは、しばらく研究したことがありませんが、画像を表示するのが良い選択だと思います.