Flexy で携帯絵文字 (数字だけ)

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 だと分かってはいるけど、しかし...