Flexy のテンプレート内で使っているユーティリティクラスから数字の絵文字を返すメソッドを抜粋。
出力フィルタで UTF-8 から Shift_JIS (SJIS-win/CP932) に変換する前提で作成しているため、iモード用の絵文字は UTF-8 で返します。
(EZweb/SoftBank の絵文字は 0x7F より大きいバイトが入らないので関係なし)
(追記: 念のため補足しておくと、このメソッドで生成される絵文字には 0x7F より大きいバイトが入らないということです)
<?php function getNumberEmoji($n, $utf8 = true) { static $mobile = null; if (!$mobile) { require_once 'Net/UserAgent/Mobile.php'; $mobile = &Net_UserAgent_Mobile::factory(); } $i = strpos('#1234567890', (string)$n, 1); if (!$i || strlen($n) != 1) { return $n; } if ($mobile->isDoCoMo()) { if ($utf8) { $prefix = "?xEE?x9B"; $base = 0xA1; } else { $prefix = "?xF9"; $base = 0x86; } return $prefix . chr($base + $i); } elseif ($mobile->isEZweb()) { if ($i == 10) { return '<img localsrc="325" alt="0" />'; } else { return sprintf('<img localsrc="%d" alt="%d" />', 179 + $i, $i); } } elseif ($mobile->isVodafone()) { return "?x1B?$F" . chr(0x3B + $i) . "?x0F"; } else { return sprintf('%d.', $n); } } ?>
例によってバックスラッシュが文字化け。悪いのは OSX だと分かってはいるけど、しかし...