[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 メーリングリストの案内