MobilePictogramConverterの使い方(PEAR::Net_UserAgent_Mobileとの組み合わせ)
1つのテンプレート(文字コードはUTF8で、出力はShift_JIS。フレームワーク上で開発し、テンプレートはSmartyを使用)で作成している3キャリア対応の携帯サイトを作成していた。
本来、開発がメインなのでデザインはやらないのだが、とある事情でパパっとデザイン・コーディングをやらなければならなくなった。
で、気になったのが絵文字の表示。単純にiモードのSJIS10進数でテンプレートに埋め込んでも良いのだが、それだとPCで確認もできないし、工夫がない。
で、以前から気になっていた絵文字変換ライブラリの「MobilePictogramConverter」を使用してみることにした。
まずは、以下のサイトからダウンロード。
MobilePictogramConverter
次にSmartyへの組み込み方を調べたところ、plugin関数を公開されている方がいたので、そのファイルを以下のページからダウンロード。
http://d.hatena.ne.jp/zakira/20080128/1201479687
上記のサイトからダウンロードしてきたフォルダ内に、Smartyのplugin関数ファイル「outputfilter.convEmojiFilter.php」があるので、それを自分のsmartyのpluginsディレクトリにそのまま入れる。
合わせてMySmarty.class.php内に、以下の記述をする。
//表示するときにOutputフィルタ(lib/smarty/plugins/outputfilter.convEmojiFilter.php)を使う
$this->autoload_filters = array(”output”=>array(”convEmojiFilter”));
で、実機(3キャリア)とPCで検証したところ、きちんと絵文字で表示されるキャリアとそうでないキャリアがあった。
で色々調べたところ、「$mpc->autoConvert();」のあたりが怪しいということになった。
もう一度、公式の配布サイトにアクセスして、きちんと「i_sjis.phps」のサンプルを見てみると変換出力のところは、キャリア毎に細かく指定できるよう。
http://php-develop.org/MobilePictogramConverter/example/i_sjis.phps
/* モバイル表示用(Web入力コード) */
//echo ‘FOMA : ‘ .$mpc->Convert(MPC_TO_FOMA , MPC_TO_OPTION_WEB).’
‘.”\r\n”;
//echo ‘EZweb : ‘ .$mpc->Convert(MPC_TO_EZWEB , MPC_TO_OPTION_WEB).’
‘.”\r\n”;
//echo ‘SoftBank : ‘.$mpc->Convert(MPC_TO_SOFTBANK, MPC_TO_OPTION_WEB).’
‘.”\r\n”;
なので、「convEmojiFilter」内で、キャリアを判別して、そのキャリア毎に変換出力の方法を指定してやるようにプログラムしたところ、1つのテンプレートにiモードのSJIS10進数で絵文字を記述した場合に3キャリア全てとPCで問題なく絵文字が表示できるようになった。
以下、完成形の「convEmojiFilter」のソース
function smarty_outputfilter_convEmojiFilter($tpl_output)
{
// 携帯キャリア判別用ライブラリを読み込む
require_once('lib/pear/Net/UserAgent/Mobile.php');
require_once('lib/3rdParty/MobilePictogramConverter/MobilePictogramConverter.php');
$option = MPC_FROM_OPTION_WEB;
$mpc =& MobilePictogramConverter::factory($tpl_output, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8, $option);
if (is_object($mpc) == false) {
die($mpc);
}
$mpc->setImagePath('lib/3rdParty/MobilePictogramConverter/img/');
// Net_UserAgent_Mobileクラスの生成
$agent = Net_UserAgent_Mobile::singleton();
if($agent->isDoCoMo()){
$tpl_output = $mpc->Convert(MPC_TO_FOMA, MPC_TO_OPTION_WEB);
}elseif($agent->isEZweb()){
$tpl_output = $mpc->Convert(MPC_TO_EZWEB, MPC_TO_OPTION_WEB);
}elseif($agent->isSoftBank()){
$tpl_output = $mpc->Convert(MPC_TO_SOFTBANK, MPC_TO_OPTION_WEB);
}else{
$tpl_output = $mpc->autoConvert(); // PC確認時用
}
return $tpl_output;
}
?>