前回までは概要をお伝えしてきましたので、もう少し突っ込んでコードを交えた解説をします。
※今回はドコモの記述を行いますが、どのキャリアでも応用は利くと思います。
■絵文字変換リストを用意する
//例
/** * 絵文字変換マッピングテーブル */ $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以外も同じ手順で正規表現部分を変更すれば、作成することが可能だと思いますのでトライして下さい。
以上。これらのコードがお役に立てれば幸いです。