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. CentOS 5.8にNode.jsをインストール - ZeBeVogue別館
2. meta の viewport - ZeBeVogue別館
3. jQueryで複数のイベントを割り当てる - ZeBeVogue別館
4. MacでPutty形式の秘密鍵を変換する - ZeBeVogue別館
5. smarty で携帯絵文字 - ZeBeVogue別館
6. DropboxのDatastore APIをさっそく使ってみた - ZeBeVogue別館
7. ChromeでAccess-Control-Allow-Originを停止させつつ、別アプリとして動かす - ZeBeVogue別館
8. PhantomJSでスクリーンショットを撮る&HTML2PDF - ZeBeVogue別館
9. ExpressJSでのバリデーション(express-validator) - ZeBeVogue別館
10. Node.jsでAmazon S3にアップロードする方法 - ZeBeVogue別館
11. neu.Nodeを触ってみました - ZeBeVogue別館
12. Twitter Bootstrapのカルーセルをキーボードとスワイプで操作 - ZeBeVogue別館
13. PHPで簡単XPath(ATOM/RSS1.0) - ZeBeVogue別館
14. Node.js/PHPでの様々な文字列ハッシュの生成 - ZeBeVogue別館
15. ApacheとNode.jsを連携させる - ZeBeVogue別館
16. gruntでJavaScript/CSSを結合・minify - ZeBeVogue別館
17. Node.js/ExpressJSでのファイルのアップロード - ZeBeVogue別館
18. PDFKitを使ってNode.jsからPDFを作成する - ZeBeVogue別館
19. node.jsからPhantomJSを使ってPDFを生成する - ZeBeVogue別館
20. node.jsのMVCフレームワークSails.jsを使ってみた - ZeBeVogue別館
21. Expressのルーティングの自動化(Node.js) - ZeBeVogue別館
22. ZeBeVogue別館
23. Node.jsでjQueryを利用する - ZeBeVogue別館
24. PhalconのWebToolsを使ってみる - ZeBeVogue別館
25. nodemailerでNode.jsからメールを送る - ZeBeVogue別館
26. yumでpgpool-IIをインストール - ZeBeVogue別館
27. Titaniumでadmobを利用する(Android編) - ZeBeVogue別館
28. Firefox OSでサンプル作ってみた - ZeBeVogue別館
29. reveal.jsで格好いいプレゼンを作ってみた - ZeBeVogue別館
30. WebViewのクリックイベントをTitaniumへ渡す - ZeBeVogue別館