HTML_Emoji の使い方

目次

入出力の変換

HTML_Emoji ライブラリは、次のような使い方をすることを想定しています。

  • 入力された絵文字は UTF-8 に変換して保存
  • SoftBank の端末や PC では、UTF-8 のまま表示
  • その他の携帯では、Shift_JIS に変換して表示

入出力を Shift_JIS に統一したり、UTF-8 に統一することも可能ですが、 このようにするのが一番トラブルが少ないはずです。

簡単な使い方

フォームから入力された絵文字の混じったデータは、 Input というフィルタを通すことによって、 UTF-8 に変換することができます。

// HTML_Emoji ライブラリの読み込み
require_once 'HTML/Emoji.php';

// 現在の端末用の HTML_Emoji オブジェクトを作成
$emoji = HTML_Emoji::getInstance();

// 入力データを UTF-8 に変換
$text = $emoji->filter($text, 'input');

// データを保存
......

また、絵文字を含んだテキストを出力する際には、 Output というフィルタを通すことによって、 現在の端末に適した形に変換することができます。

// HTML_Emoji ライブラリの読み込み
require_once 'HTML/Emoji.php';

// 現在の端末用の HTML_Emoji オブジェクトを作成
$emoji = HTML_Emoji::getInstance();

// PC で表示する際に用いる画像ファイルの URL を指定
$emoji->setImageUrl('images/');

// データの読み込み
$text = ......

// 現在の端末で表示するのに適した形にデータを変換
$text = $emoji->filter($text, 'output');

isSjisCarrier() メソッドは、 docomo や au の携帯ならば true を、SoftBank の携帯や PC ならば false を返します。 このメソッドを用いると、次のように場合分けの処理を書くことができます。

// 端末の種類に応じて、適切な header を出力
if ($emoji->isSjisCarrier()) {
    header('Content-Type: text/html; charset=Shift_JIS');
} else {
    header('Content-Type: text/html; charset=UTF-8');
}

多くの場合は、これだけで絵文字を扱うことができます。

もう少し詳しい説明

上で説明した Input, Output フィルタは、 実際には次のように HTML_Emoji のいくつかのメソッドを順番に呼び出しています。

  • Input フィルタ
    // 入力データが Shift_JIS ならば UTF-8 に変換
    if ($emoji->isSjisCarrier()) {
        $text = $emoji->convertEncoding($text, 'UTF-8', 'SJIS');
    }
    
    // 数値文字参照の絵文字が含まれていたら UTF-8 の絵文字に変換
    $text = $emoji->filter($text, array('DecToUtf8', 'HexToUtf8'));
  • Output フィルタ
    // 他キャリアの UTF-8 の絵文字を、現在の端末で表示できる形に変換
    $text = $emoji->convertCarrier($text);
    
    // Shift_JIS で表示すべき端末ならば Shift_JIS に変換
    if ($emoji->isSjisCarrier()) {
        $text = $emoji->convertEncoding($text, 'SJIS', 'UTF-8');
    }

Input, Output フィルタを使う代わりに、これらのメソッドを直接呼ぶようにすれば、 絵文字の変換処理をより細かくコントロールすることができます。 他にも様々なメソッドやフィルタが用意されていますので、 詳しくは HTML_Emoji のメソッドHTML_Emoji のフィルタ のページを参照して下さい。

また、配布ファイルの examples ディレクトリに幾つかのサンプルが含まれていますので、 そちらも参考にして下さい。