9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのmb_convert_encodingを使って、絵文字を表示

Last updated at Posted at 2016-02-10

PHP5.4からmb_convert_encodingのサポートされる文字エンコーディングに
UTF-8-Mobile#DOCOMO、UTF-8-Mobile#KDDI-A、UTF-8-Mobile#KDDI-B、UTF-8-Mobile#SOFTBANKが加わりました。

サポートされる文字エンコーディング

これによって、絵文字の変換が楽になりました :smile:

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」と出力され、最後の文字が消える現象が発生しました :scream:

半角アルファベットやマルチバイトの文字の場合は問題なく、半角数字が末尾にある場合に発生します。(※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を除去するようにしています。

まとめ

この方法がベストかどうかはわからないのですが、同じようにつまずいている方がいらっしゃれば、参考にしていただければと思います。

もし、これよりも良い方法や、根本的な解決策をご存知の方がいらっしゃれば、ご教授願いたいです。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?