Tech
Webシステムプログラマーによる、ちょっとためになる(かもしれない)情報共有ブログ
 

【第65回】絵文字の出力について(その3)

 
今日は久しぶりに絵文字の続きをやりたいと思います。

これまで絵文字を表示する方法として次のパターンがありますが・・・

1.3キャリアそれぞれのHTMLテンプレートを用意して、それぞれのキャリアに応
じた絵文字を書く方法。

2.キャリアごとに絵文字の配列を作り、キャリアに応じた絵文字を表示する方法

3.iモード用の絵文字を書いたテンプレートを用意して、それをezweb、Softbank
用に変換して出力させる方法

4.絵文字用にタグを作っておいて、タグから絵文字に変換して出力する方法。

これまでは1と2の方法を紹介しました。
今日は3のiモード用の絵文字を書いたテンプレートを用意してキャリアに応じた
絵文字に変換する方法です。

とても簡単なサンプルを作ってみます。

<?php

/**
* DoCoMo端末の確認
*
*/

function is_docomo(){

// ユーザーエージェントの取得
$agent = $_SERVER['HTTP_USER_AGENT'];

// キャリアの判別
if(ereg("^DoCoMo", $agent) && !eregi( "ISIM", $agent )){

return TRUE;

}else {
return FALSE;
}
}

/**
* au端末の確認
*
*/

function is_au(){

// ユーザーエージェントの取得
$agent = $_SERVER['HTTP_USER_AGENT'];

// キャリアの判別
if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){

return FALSE;

}

// キャリアの判別
if(strpos($agent,"KDDI-") !== FALSE || strpos($agent,"UP.Browser/")
!== FALSE){

return TRUE;

} else {

return FALSE;

}
}

/**
* Softbank端末の確認
*/

function is_softbank(){

// ユーザーエージェントの取得
$agent = $_SERVER['HTTP_USER_AGENT'];

// キャリアの判別
if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){

return TRUE;

} else {

return FALSE;
}
}


/* iモードの絵文字をその他のキャリアの絵文字に変換 */
function conv_emoji($buffer){

$emoji_data_array[1] = array("?","&#xE488;","\x1B\$Gj\x0F");
$emoji_data_array[2] = array("?","&#xE48D;","\x1B\$Gi\x0F");
$emoji_data_array[3] = array("?","&#xE48C;","\x1B\$Gk\x0F");
$emoji_data_array[4] = array("?","&#xE485;","\x1B\$Gh\x0F");

if( is_au()){

// auの場合
foreach($emoji_data_array as $value){

$buffer = str_replace($value[0], $value[1], $buffer);

}

} elseif(is_softbank()){

// Softbankの場合
foreach($emoji_data_array as $value){

$buffer = str_replace($value[0], $value[2], $buffer);

}

}

return $buffer;

}
header("Content-type: text/html; charset=Shift_JIS");
ob_start("conv_emoji");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>ProMobile Friday Blog</title>
</head>
<body>
絵文字のテストです<br />
?<br />
?<br />
?<br />
?<br />
</body>
</html>
<?php
ob_end_flush();
?>


記事のスペースの関係で今回使う絵文字のデータは4つだけにしています。

$emoji_data_array[1] = array("?","&#xE488;","\x1B\$Gj\x0F");
$emoji_data_array[2] = array("?","&#xE48D;","\x1B\$Gi\x0F");
$emoji_data_array[3] = array("?","&#xE48C;","\x1B\$Gk\x0F");
$emoji_data_array[4] = array("?","&#xE485;","\x1B\$Gh\x0F");

絵文字のデータはDoCoMo,au,Softbankの順番で絵文字用データを作ります。

最初のDoCoMoのデータは文字化けしているかもしれませんが、それぞれ、晴れ、
曇り、雨、雪の絵文字が入っています。

DoCoMoで配布しているi絵文字またはバイナリエディタで入れます。

auはUnicode、SoftbankはWebコードを入れています。

HTMLの部分にDoCoMo用の絵文字を入れます。

同じ様にi絵文字またはバイナリエディタで入れます。

前回紹介した出力関数を使って文字の置き換えをします。

ob_start関数でconv_emoji関数をコールバックして端末判定をして・・・

auとSoftbankの場合はDoCoMoの絵文字をそれぞれのキャリアに変換して出力します。

プログラムを作ってアップロードします。

DoCoMoとauとSoftbankの3キャリアの端末で確認してみます。

おお~絵文字が表示されました。

DoCoMo(N-01A)
1.jpg

au(W41K)
2.jpg

Softbank(923SH)
3.jpg

元々DoCoMoの絵文字を入れているのでDoCoMoは絵文字が出るのが当たり前ですが、
au、Softbankでも変換されて表示されました。

今日はこれでおしまいです。

トラックバック(0)

トラックバックURL: http://blog.promob.jp/mt/mt-tb.cgi/334

コメントする