絵文字活用術その5::docomo絵文字変換

By uchida - 08/09/11 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

前回までは概要をお伝えしてきましたので、もう少し突っ込んでコードを交えた解説をします。
 ※今回はドコモの記述を行いますが、どのキャリアでも応用は利くと思います。

■絵文字変換リストを用意する
//例

/**
 * 絵文字変換マッピングテーブル
 */
$table = array(
    63647 => 2,
    63648 => 4,
    63649 => 5,
    63650 => 6,
          ・
          ・
          ・

■絵文字変換前処理
置換処理を行う前処理として、送られてきた文字を改行ごとに分けます。

$lines = explode("\n", $str);

■文字列をループさせ、絵文字を1つずつ置換する

01:foreach ($lines as $line) {
02:    if (preg_match('/[\xF8\xF9]/', $line)) {
03:       while (true) {
04:            if (preg_match('/^[\xF8\xF9][\x40-\xFC]/', $line , $matches)) {
05:                $line = preg_replace('/^[\xF8\xF9][\x40-\xFC]/', '', $line);
06:                // 絵文字置換
07:                $bin = unpack('n1int', $matches[0]);
08:                $new .= "[{$prefix}{$table[$bin['int']]}]";
09:            } else {
10:                break;
11:            }
12:        }
13:    } else {
14:        $new = $line;
15:    }
16:    $encoded[] = $new;
17:}

まず、絵文字コードがパック16進数になっていますので、正規表現は16進数で行っております。
絵文字変換リストと照らし合わせるとき(7~8行)にアンパックして処理しています。
絵文字から管理用の絵文字に変換している8行では、処理エンコードからShift-JISに変換しておかないといけませんので、
セルバでは

$prefix = mb_convert_encoding('絵', 'SJIS', 'EUC-JP');

と処理をして結果、[絵**]と変換してあります。

これで基本的な絵文字の変換が行えると思います。
docomo以外も同じ手順で正規表現部分を変更すれば、作成することが可能だと思いますのでトライして下さい。

以上。これらのコードがお役に立てれば幸いです。

Posted in 絵文字 • Tags: , , Top Of Page