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







