[PHP-dev 1512] 絵文字 <-> Unicode 6.0 変換

Rui Hirokawa rui.hirokawa @ gmail.com
2011年 7月 24日 (日) 14:27:26 JST


廣川です。

Unicode 6.0 に収録された携帯電話の絵文字領域と
各キャリア(DoCoMo,KDDI,SoftBank)のShift_JIS絵文字コードの
相互変換を行う機能をlibmbglに追加しました。

Unicode絵文字は、先日リリースされたLionでもサポートされており、
今後、普及するものと予想しています。

今回追加するのは、SJIS-Mobile#DoCoMo などの携帯電話用エンコーディングを
定義、絵文字領域をUnicode 6.0の絵文字領域にマップし、相互変換を可能と
するものです。
また、既存のPUAコードの変換もサポートしています。

なお、一部のベンダ固有文字や特定の文字がベンダでサポートされない場合の
フォールバック(他の文字を出力)はサポートされません。

以下、エンコーディングと例を示します。

- Unicode 6.0 の絵文字領域にマップ

SJIS-Mobile#DoCoMo    :
  DoCoMo emoji <-> Unicode 6.0
SJIS-Mobile#KDDI     :
  KDDI (EzWeb) emoji <-> Unicode 6.0
SJIS-Mobile#SOFTBANK :
  SoftBank emoji <-> Unicode 6.0

- Unicode PUAにマップ(下位互換用)

SJIS-Mobile#PUA :
    DoCoMo/KDDI(通称裏コード)/SoftBank emoji <-> Unicode PUA
SJIS-Mobile#PUA-KDDI :
    DoCoMo/KDDI emoji <-> Unicode PUA


[使用例]
// DoCoMo emoji -> KDDI emoji (via Unicode 6.0)
echo mb_convert_encoding("\xf8\x9f",
      "SJIS-Mobile#KDDI",
      "SJIS-Mobile#DoCoMo"); // 0xf89f -> 0xf660

[PHP5への組込み]
1.https://github.com/moriyoshi/libmbfl
  から moriyoshi-libmbfl*.tar.gz をダウンロードして、
  PHP 5.3.x/5.4dev の ext/mbstring/libmbfl に置き換え
2.以下のパッチをPHPのソースコードに摘要

--- ext/mbstring/config.m4	(リビジョン 313364)
+++ ext/mbstring/config.m4	(作業コピー)
@@ -264,6 +264,7 @@
      libmbfl/filters/mbfilter_qprint.c
      libmbfl/filters/mbfilter_sjis.c
      libmbfl/filters/mbfilter_sjis_open.c
+     libmbfl/filters/mbfilter_sjis_mobile.c
      libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c
      libmbfl/filters/mbfilter_ucs2.c
      libmbfl/filters/mbfilter_ucs4.c

3. PHP5を構築
  ./buildconf
  ./configure --enable-mbstring
  make

SoftBankのエスケープシーケンス、email用のエンコーディングなどが
ありますが、現時点では未サポートです。

外字以外の領域は、SJIS-win をベースにしています。当初は、
SJIS-win#DoCoMo というSJIS-winからの派生を意図したエンコーディング名にし
ようとしていましたが、Windows固有ではないため、SJIS-Mobileという独立した
名前にしています。

あわせてサポートされるPUA経由でのエンコーディング変換はSJIS-winでもサ
ポートされていますが、DoCoMo以外はベンダがするPUAへのマッピングとずれて
おり、SoftBankとKDDIが一部かぶっているため、従来は工夫が必要でした。

なお、PUA経由での変換仕様については、以下を参考にしています。

http://search.cpan.org/~coderepos/Encode-JP-Mobile-0.27/lib/Encode/JP/Mobile.pm

現時点では、github に libmbflとしてあげている実験的な位置づけですが、
基本仕様に問題がなければ、PHP 5.4のmbstringに組み込む構想です。

仕様等にご意見ありましたらお知らせください。

-- 
Rui Hirokawa <rui.hirokawa @ gmail.com> (@rui_hi)


PHP-dev メーリングリストの案内