PHP5.4からmb_convert_encodingのサポートされる文字エンコーディングに
UTF-8-Mobile#DOCOMO、UTF-8-Mobile#KDDI-A、UTF-8-Mobile#KDDI-B、UTF-8-Mobile#SOFTBANKが加わりました。
これによって、絵文字の変換が楽になりました
DB上から絵文字を取り出し画面に表示する場合
sample.php
$encoding = mb_convert_encoding($source, "UTF-8-Mobile#DOCOMO","UTF-8");
DB上に絵文字を登録する場合
sample.php
$encoding = mb_convert_encoding($source, "UTF-8","UTF-8-Mobile#DOCOMO");
※ DB、画面表示ともUTF-8を前提としております。
ひとつ問題が・・・
以下のプログラムを御覧ください
sample.php
$moji = "123";
echo mb_convert_encoding($moji, "UTF-8-Mobile#DOCOMO","UTF-8");
出力結果
12
「123」という文字列を変換したら、「12」と出力され、最後の文字が消える現象が発生しました
半角アルファベットやマルチバイトの文字の場合は問題なく、半角数字が末尾にある場合に発生します。(※123⇒12となるが、1234⇒1234と表示されたりと、規則性がわからない状態です)
暫定処置
sample.php
$moji = "123"."\0";
echo rtrim(mb_convert_encoding($moji, "UTF-8-Mobile#DOCOMO","UTF-8"));
出力結果
123
上記のように、文字列の末尾に「\0」(NULL)をつけてあげると、正しく表示されました。
一応、rtrim()を使って、末尾のNULLを除去するようにしています。
まとめ
この方法がベストかどうかはわからないのですが、同じようにつまずいている方がいらっしゃれば、参考にしていただければと思います。
もし、これよりも良い方法や、根本的な解決策をご存知の方がいらっしゃれば、ご教授願いたいです。