今回は前回の続きで絵文字の出力についてです。
絵文字の出力方法については、次のパターンがあることは前回も書きました。
1.3キャリアそれぞれのHTMLテンプレートを用意して、それぞれのキャリアに応
じた絵文字を書く方法。
2.キャリアごとに絵文字の配列を作り、キャリアに応じた絵文字を表示する方法
3.iモード用の絵文字を書いたテンプレートを用意して、それをezweb、Softbank
用に変換して出力させる方法
4.絵文字用にタグを作っておいて、タグから絵文字に変換して出力する方法。
前回は3のiモード用の絵文字を書いたテンプレートを用意してキャリアに応じた
絵文字に変換する方法について、とても簡単なサンプルを作りました。
今回は4の絵文字タグが入ったテンプレートを用意してキャリアに応じた絵文字
に変換する方法です。
とても簡単なサンプルを作ってみます。
今回は、絵文字用のCSVファイルを作ります。
(emoji.csv)
1,晴れ,,,
2,曇り,,,
3,雨,,,
4,雪,,,
記事のスペースの関係で今回もデータは4つだけ入れています。
今回の絵文字データはUnicodeを使っています。
絵文字番号、名前、i-mode絵文字のUnicode、au絵文字のUnicode、Softbank絵文
字のUnicode
の順に入れています。
次に次のようなプログラムを作ります。
(emoji_test.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;
}
}
/**
* 絵文字タグから絵文字に変換する
*/
function dec_emoji_output($buffer){
// 出力文字データの初期化
$output = "";
// 入力データがない場合は終了
if(empty($buffer)){
return ;
}
// 絵文字タグを検索する
preg_match_all('/{emoji:([0-9]+)}/', $buffer, $matches);
// 絵文字タグ部分を絵文字に置き換える
if($matches[0] && $matches[1]){
$output = conv_emoji_output($matches,$buffer);
} else {
$output = $buffer;
}
return $output;
}
/**
* 絵文字タグ部分を絵文字に置き換える
*/
function conv_emoji_output($matches,$str){
// 出力データの初期化
$output = "";
// 入力データがない場合は処理終了
if(empty($matches) || !is_array($matches) || empty($str)){
return '';
}
$moji_data = $matches[0];
// 絵文字出力変換データを取得する
$emoji_data = get_emoji_output_data();
foreach($moji_data as $value){
// コロン区切りのデータを配列に入れる
$emoji_num_array = explode(':',str_replace("}", "", $value));
$emoji_num = $emoji_num_array[1];
// キャリアに応じて最適な絵文字を呼び出す
if( is_docomo()){
// DoCoMo
$output = trim($emoji_data[$emoji_num][0]);
}elseif(is_au()){
// au
$output = trim($emoji_data[$emoji_num][1]);
}elseif(is_softbank()){
// Softbank
$output = trim($emoji_data[$emoji_num][2]);
} else {
// PC(DoCoMo)
$output = trim($emoji_data[$emoji_num][0]);
}
// 該当データがない場合はゲタ文字を入れる
if(empty($output)){
$output = "〓";
}
$str = str_replace($value, $output, $str);
}
return $str;
}
/**
* 絵文字変換データを取り出す
*/
function get_emoji_output_data(){
// キャリア絵文字変換表を呼び出す
$handle = fopen("./emoji.csv", "r");
// データを配列に格納する
while(($emoji_data = fgetcsv($handle, 1000, ',')) !== FALSE){
$emoji_all_data_array[$emoji_data[0]] =
array($emoji_data[2],$emoji_data[3],$emoji_data[4]);
}
// ファイルを閉じる
fclose($handle);
return $emoji_all_data_array;
}
header("Content-type: text/html; charset=Shift_JIS");
ob_start("dec_emoji_output");
?>
<!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 />
{emoji:1}<br />
{emoji:2}<br />
{emoji:3}<br />
{emoji:4}<br />
</body>
</html>
<?php
ob_end_flush();
?>
サンプルでは、HTML部分に{emoji:絵文字番号}という形で絵文字タグを入れてい
ます。
出力関数でdec_emoji_output()メソッドを呼び出して、絵文字タグの部分を絵文
字に置き換えて表示します。
最初は絵文字タグがあるかどうかを確認し、ある場合はconv_emoji_output()関
数でCSVから絵文字データを呼び出して、絵文字タグから絵文字番号に相当する
絵文字に変換します。
emoji.csvとemoji_text.phpをサーバーにアップして、DoCoMo、Au、Softbankの
携帯電話でemoji_text.phpにアクセスしてみます。
おお~~っ!!先週に続き、今週も絵文字が表示されました。
絵文字のテストです
?
?
?
?
これまで、絵文字の表示パターンについて説明してきましたが、先週の3のパ
ターンはデザイナーが多く、i絵文字も駆使してデザインとHTMLコーディングだ
けに集中したい場合、4は絵文字の表示だけでなく絵文字掲示板も取り入れたい
場合に使われます。
一昔は、1のようにテンプレートを分ける方法や、2の絵文字配列を使う方法が見
られましたが、最近は絵文字掲示板機能を使うところが増えており、4の方法が
多く見られるようになりました。
絵文字の扱い方もいろいろありますね。
ということで、絵文字の出力についてはこれでおしまいです。














コメントする