ZeBeVogue別館 このページをアンテナに追加 RSSフィード

2007年10月29日

Smarty で携帯絵文字

携帯絵文字変換スクリプトをPHPで作ってみた。 携帯サイトを作ろう! -ちょっと詳しいモバイルサイトの作り方-で変換スクリプトが公開されていたので、Smartyテンプレートで使えるようにカスタム関数にしてみました。使い方はファイルをlib/plugins/にfunction.emoji.phpなどとして突っ込んで、emoji.csvを呼び出しスクリプトと同じ場所に置けばOK。

カスタム関数を書きなれてないので間違ってるかも知れないけども・・。

<?php
//携帯端末のユーザエージェントを判定
function mobile($data)
{
	if (preg_match("/^DoCoMo\/[12]\.0/i", $data)) {
		return "i";	// i-mode
	} else if (preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]980|SoftBank)\//i", $data)) {
		return "s";	// softbank
	} else if (preg_match("/^KDDI\-/i", $data) || preg_match("/UP\.Browser/i", $data)) {
		return "e";	// ezweb
	} else if (preg_match("/^PDXGW/i", $data) || preg_match("/(DDIPOCKET|WILLCOM);/i", $data)) {
		return "w";	// willcom
	} else if (preg_match("/^L\-mode/i", $data)) {
		return "l";	// l-mode
	} else {
		return "p";	// pc
	}
}

//携帯キャリアに合わせて絵文字を出力
function emoji($data, $emoji_array)
{

	//携帯UA取得
	$agent = $_SERVER["HTTP_USER_AGENT"];
	if(preg_match("/[0-9]{1,3}/", $data) && is_numeric($data) && 0 < $data && $data < 253) {
		switch (mobile($agent)) {
			case "i";
				$put = $emoji_array[$data][1];
				break;
			case "e";
				if (preg_match("/[^0-9]/", $emoji_array[$data][2])) {
					$put = $emoji_array[$data][2];
				} else {
					$put = "<img localsrc=\"".$emoji_array[$data][2]."\" />";
				}
				break;
			case "s";
				if (preg_match("/^[A-Z]{1}?/", $emoji_array[$data][3])) {
					$put = "\x1B\$".$emoji_array[$data][3]."\x0F";
				} else {
					$put = $emoji_array[$data][3];
				}
				break;
			case "p";
				$put = "[PCでは絵文字は表示されません]";
				break;
		}
		return $put;
	} else {
		return "[Error!]\n";
	}
}

function encode($data) {
	$data = mb_convert_encoding($data, "SJIS", "auto");
	return $data;
}

function smarty_function_emoji($params, &$smarty)
{

	if (!isset($params['num'])) {
		$smarty->trigger_error("emoji: missing 'num' parameter");
		return;
	}

	if($params['num'] == '') {
		return;
	}

	$smarty->_compile_source('evaluated template', $params['num'], $_var_compiled);

	//絵文字変換表
	$emoji_data = "emoji.csv";

	//入力値取得
	$num = $params['num'];

	//変換表を配列に格納
	$emojis = file($emoji_data);
	foreach ($emojis as $num => $line) {
		$line_data = explode(',', $line);
		$emoji_array[$line_data[0]] = $line_data;
	}

	//処理
	$_contents = emoji($params['num'], $emoji_array);

	if (!empty($params['assign'])) {
		$smarty->assign($params['assign'], $_contents);
	} else {
		return $_contents;
	}
}
?>

テンプレート側に記述する時は、

{emoji num="120"}

などとすればOK。


追記

使っていたらエラーが出てしまったので、一部変更。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zebevogue/20071029/1193622211
人気の記事

はてなブックマーク - 人気エントリー - 『ZeBeVogue別館』

1. meta の viewport - ZeBeVogue別館
2. smarty で携帯絵文字 - ZeBeVogue別館
3. PHPで簡単XPath(ATOM/RSS1.0) - ZeBeVogue別館
4. YSlow for Firebugを日本語で便利に使う - ZeBeVogue別館
5. ASXをRuby/Perl/PHPで - ZeBeVogue別館
6. ZeBeVogue別館
7. ATOM 0.3と1.0の変更点とXPathに便利なソフトウェア - ZeBeVogue別館
8. yumでpgpool-IIをインストール - ZeBeVogue別館
9. Flickrのようなページ切り替えメニューをRubyやJavaScriptで生成する - ZeBeVogue別館
10. iPhone上でPHPが動いた - ZeBeVogue別館
11. CodeIgniter + Uploadify - ZeBeVogue別館
12. SmartyのPEARインストール方法2つ - ZeBeVogue別館
13. GoogleCLをWindows上で使う - ZeBeVogue別館
14. ニューヨークタイムズの記事からの検索がセクシーすぎる - ZeBeVogue別館
15. PEAR::HTTP_Client でユーザエージェントを指定する - ZeBeVogue別館
16. 携帯判別と識別番号取得 - ZeBeVogue別館
17. ZeBeVogue別館 - Scuttleのカスタマイズ - エクスポート
18. CodeIgniterで全ての形式のアップロードを許可する方法 - ZeBeVogue別館
19. CodeIgniterでの複数ファイルアップロードでの注意点 - ZeBeVogue別館
20. Amazonで90%OFFの商品を表示させるブックマークレット - ZeBeVogue別館
21. Google ReaderからMixiへ記事を投稿 - ZeBeVogue別館
22. CodeIgniterで独自404エラーページを設置する方法 - ZeBeVogue別館
23. ちょっとハマったPHP/PDOでのSQLite操作 - ZeBeVogue別館
24. iSSHを使って、iPhone上でX Windowを動かす - ZeBeVogue別館
25. 最近使ったJavaScriptライブラリ - ZeBeVogue別館
26. Smarty で携帯絵文字 - ZeBeVogue別館
27. Google App Engineでのcron処理 - ZeBeVogue別館
28. Scuttleのカスタマイズ - サムネイル - ZeBeVogue別館
29. PHP 5.2.9でPostgreSQLに接続できない問題 - ZeBeVogue別館
30. pearコマンドが動かない時の復旧方法 - ZeBeVogue別館