第7回 フォームで絵文字の投稿も受け付けたい - モバイル開発講座 入門・実践編
まる先生のモバイル開発講座 入門・実践編
Lecutures on PHP
第7回 フォームで絵文字の投稿も受け付けたい (その1)
今回から実践編として、静的なページだけでなく、動的なアプリを作成する上で必要になることがらを取り上げていきます。
今回は、絵文字の投稿を受け付けるにはどのようにすればいいのかを取り上げます。
絵文字の表示については、第4回でとりあげましたので、そちらも合わせて参照してください。
http://www.phppro.jp/school/mobile/vol4/1
今回のテーマはこちらになります。
- 文字コードについて
- サーバの設定について
- 受け取った絵文字について
- キャリア間の変換について
- サンプルプログラム
1. 文字コードについて
まず意識しなければいけないのが、文字コードです。
フォームから送られてきた絵文字は、バイナリ形式でサーバに送られてきます。
送られてきた文字列を他の文字コードに変換した場合、変換に失敗して絵文字が抜け落ちたり、他の文字になってしまうことがあります。
プログラムのソースファイルの文字コードがUTF-8で、表示してるページを、docomo,auはShiftJIS、SoftBankをUTF-8で表示している場合、表示をするときにも文字コードの変換が必要ですが、取得するときにも文字コードの変換をする必要があります。
ユーザから送られてくる文字コード
- docomo ShiftJIS
- au ShiftJIS
- SoftBank UTF-8
通常は、表示をしているhtmlの文字コードと同じ文字コードでフォームの内容がポストされてきますが、auのみUTF-8でページを表示したとしても、ShiftJISで送られてくるので注意が必要です。
2. サーバの設定について
phpの入力の文字コードの自動判別をしている場合、マルチバイト文字列を扱うphp.iniの設定で以下の項目を使うことになります。
mbstring.http_input mbstring.encoding_translation
http_inputの設定に「auto」と指定しておくと、自動でソースの内部エンコーディングに変更してくれますが、絵文字を受け取るとなると、この自動変換の仕組みは使えません。
設定例(.htaccessの場合)
php_value mbstring.http_input pass php_flag mbstring.encoding_translation Off
phpのマニュアルの「HTTP入出力」の項目も参考にしてください。
3. 受け取った絵文字について
フォームから受け取った文字列の絵文字を保持するようにします。
受け取った絵文字の文字コードを、phpの内部で扱う文字コードに統一します。
絵文字データは、バイナリ形式で文字列に含まれている状態になります。
HTML_Emojiの機能を使用します。
HTML_Emojiのフィルタ機能の「Input」を使用します。
Inputフィルタを使用することで、UTF-8はそのまま、ShiftJISは絵文字の情報を保ったままUTF-8に変換することができます。
$text = $emoji->filter($text, 'Input');
4. キャリア間の変換について
絵文字のデータはそのまま表示を行うことで、出力時にHTML_Emojiを通して各キャリアへの変換処理を行えます。
HTML_Emojiが用意している変換ルールを使用するのであれば、キャリア間の変換を特別意識する必要はありません。
- 1
- 2




ページのトップへ


変数名のtypoなど簡単なミスでも自分で気が付かないことはよくあります。どうしても解決できないときは、このように他の人に見てもらったり、コーヒーでも飲んでリフレッシュしてから再度トライしてみてください。