ケータイに絵文字入りメールを送信するには(au編)
    このエントリをはてなブックマークに登録

2007/11/16 金曜日 matsui Posted in au, PHP 3 Comments »

携帯電話に絵文字入りのメールを送信するプログラム。
昨日のiモード編に続いてau(EZWeb)編です。

auのサンプルコードは下記の通りです。

サンプルコード(au用)

<?php
// EZWebに絵文字入りメールを送るサンプル

$to = '[auのアドレス]@ezweb.ne.jp';
$from = 'example@example.jp';

$emoji_ez = makeEzEmoji('EC94');		// EZマーク
$emoji_exclamation = makeEzEmoji('EB5A');	// !
$emoji_mail = makeEzEmoji('EBFA');		// メール
$emoji_smile = makeEzEmoji('EBD4');		// スマイル

$subject = $emoji_ez . '絵文字' . '入り題名デス' . $emoji_exclamation;
$body = '絵文字入りの' . $emoji_mail . '本文デス' . $emoji_smile . '。';

// 文字コードを変更
$subject = mb_convert_encoding($subject, "JIS", "SJIS");
$body = mb_convert_encoding($body, "JIS", "SJIS");

// MIMEエンコーディングを行う
$subject = "=?ISO-2022-JP?B?" . base64_encode($subject) . "?=";

// ヘッダを作成
$headers = "From: " . $from . "\\n";
$headers .= "MIME-Version: 1.0\\n";
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\\n";
$headers .= "Content-Transfer-Encoding: 7bit";

// メールを送信
$res = mail($to, $subject, $body, $headers);

// 結果を取得
if ($res) {
	echo "OK\\n";
} else {
	echo "NG\\n";
}

/**
 * EZWeb絵文字変換関数
 * @param	string		$code		絵文字を表すコードの文字列
 * @return					絵文字
 */
function makeEzEmoji($code) {
	$emoji = '';
	for ($i = 0; $i < strlen($code); $i += 2) {
		$emoji .= sprintf('%c', hexdec(substr($code, $i, 2)));
	}

	return $emoji;
}
?>

※ソースコードはSJISで記述しています

 

プログラムの最初の方で定義している絵文字の4桁のコードは、こちらに表があります。
→ KDDI au 技術情報 EZweb絵文字一覧【タイプD】 [kddi.com] ※PDFです

この表の中の一番右にある「Eメール送出用JISコードに対応したShift-JISコード」というのを使用しています。
なお、先日ご紹介した「OshimaExe」というソフトでも入力可能です。

上記のように設定した絵文字を、他の文言ごとJISコードに変換し、ISO-2022-JPのヘッダをつけて送信しています。

emojimail_au.jpg

 

関連:



ケータイに絵文字入りメールを送信するには(iモード編)
    このエントリをはてなブックマークに登録

2007/11/15 木曜日 matsui Posted in DoCoMo, PHP 1 Comment »

プログラム側からケータイに絵文字入りのメールを送りたいケースはよくありますが、通常の方法では文字化けしてしまい送信することができません。

キャリア毎に絵文字の扱いが違うため、それぞれ違うプログラムで対処する必要があります。
今回はiモード用のサンプルコードをご紹介します。

 

サンプルコード(iモード用)

<?php
// iモードに絵文字入りメールを送るサンプル

$to = '[iモードのアドレス]@docomo.ne.jp';
$from = 'example@example.jp';

$subject = '[iの絵文字]絵文字入り[キラキラの絵文字]題名デス[ハートの絵文字]';
$body = '[iの絵文字]モードの絵文字入り[キラキラの絵文字]の[メールの絵文字]本文デス。';

// MIMEエンコーディングを行う
$subject = "=?shift_jis?B?" . base64_encode($subject) . "?=";
$body = base64_encode($body);

// ヘッダを作成
$headers = "From: " . $from . "\\n";
$headers .= "MIME-Version: 1.0\\n";
$headers .= "Content-Type: text/plain; charset=Shift-JIS\\n";
$headers .= "Content-Transfer-Encoding: base64";

// メールを送信
$res = mail($to, $subject, $body, $headers);

// 結果を取得
if ($res) {
	echo "OK\\n";
} else {
	echo "NG\\n";
}
?>

※ソースコードはSJISで記述しています

絵文字はPC上からは表示できないため、「[ハートの絵文字]」のように表現してあります。
実際には「i絵文字」などのツールを使って、SJIS形式の絵文字を直接入力してください。

Content-TypeをShift-JISとすることや、Subjectをshift_jisでエンコードすることがポイントのようです。
こうしておけば、絵文字や半角カナも問題なく送信されるようです。

emojimail_i.jpg

 

関連:



PHPで作られた3キャリア対応絵文字変換ライブラリ「MobilePictogramConverter」
    このエントリをはてなブックマークに登録

2007/11/14 水曜日 matsui Posted in PHP, ソフト紹介, 記事紹介・リンク 7 Comments »

今回は、「MobilePictogramConverter」という、PHPで作られた3キャリア対応の絵文字変換ライブラリをご紹介します。

私が以前作成したKEMPというソフトの中にも、絵文字の変換処理は入っているのですが、絵文字変換機能に特化しているだけあって、こちらの方がかなり多機能です。

ページはこちらです。
→ MobilePictogramConverter [php-develop.org]

開発Blogもあります。
→ はてなダイアリー PHPとか [hatena.ne.jp]

 

特に素晴らしいのが、PCでも絵文字が表示できるように、全キャリアの絵文字画像が同梱されていることです。
(絵文字の意匠関係が大丈夫なのか、少しだけ気になりますが。。。)

ライセンスはLGPLとなっているようです。
現在も開発が進んでいるようですので、今後にも期待ですね。



iモードの絵文字を検出する正規表現
    このエントリをはてなブックマークに登録

2007/10/29 月曜日 matsui Posted in DoCoMo, PHP No Comments »

iemoji_regex

入力フォームから絵文字を入力された場合、
それをDB格納にする際や表示時に、文字化けすることがあります。

本記事では、PHPから絵文字を検出し、事前に入力エラーを出したり、
絵文字を除去したりする方法をご紹介します。
今回はまず、ドコモのiモード絵文字編です。

 

以下が絵文字を検出するサンプルです。

$in_string = $_POST['in'];	// 入力された値

$sjis  = '[\\x81-\\x9F\\xE0-\\xF7\\xFA-\\xFC][\\x40-\\x7E\\x80-\\xFC]
|[\\x00-\\x7F]|[\\xA1-\\xDF]';	// 実際には1行で入力
$emoji = '[\\xF8\\xF9][\\x40-\\x7E\\x80-\\xFC]';
$pattern = "/\\G((?:$sjis)*)(?:($emoji))/";

if (preg_match($pattern, $in_string)) {
	echo '絵文字が含まれています';
} else {
	echo '絵文字は含まれていません';
}

$in_stringに判定したい文字列を入れてください。
$sjisがSJIS判定用の正規表現、$emojiが絵文字を表す正規表現です。
(表示の都合上、改行されていますが、実際は1行で入力することにご注意ください)
それらを組み合わせた、$patternが絵文字かどうかを判定する正規表現になります。

 

続いて絵文字除去のサンプルです。

$in_string = $_POST['in'];	// 入力された値

$sjis  = '[\\x81-\\x9F\\xE0-\\xF7\\xFA-\\xFC][\\x40-\\x7E\\x80-\\xFC]
|[\\x00-\\x7F]|[\\xA1-\\xDF]';	// 実際には1行で入力
$emoji = '[\\xF8\\xF9][\\x40-\\x7E\\x80-\\xFC]';
$pattern = "/\\G((?:$sjis)*)(?:($emoji))/";

preg_match_all($pattern, $in_string, $arr);
$search = $arr[2];	// $arr[2]に対象絵文字が格納される

// 絵文字除去
$out_string = str_replace($search, array(), $in_string);

// 出力
echo $out_string;

 

動作の確認は、先日ご紹介したi絵文字を使って、PCブラウザからも行うことができますが、Firefoxなどのブラウザでは、絵文字がエンティティ化されてしまうことがありますので注意しましょう。

なお、絵文字判定の正規表現は次のサイトを参考にさせていただきました。
素敵な情報をありがとうございます。
→ CGIぽん モバイルCGI研究(i-mode編) i-mode 絵文字の処理

今回のサンプルはPHPのものでしたが、上記サイトではPerlを例にして記事が書かれています。
Perl利用者の方は参考になるのではないでしょうか。

他キャリアの絵文字の扱いについては、また後日ご紹介したいと思います。

 

関連:



PHPでキャリア毎に振り分けを行うには(ユーザエージェント編)
    このエントリをはてなブックマークに登録

2007/10/22 月曜日 matsui Posted in PHP, 全キャリア対応 No Comments »

記念すべきリニューアル後一つめの記事は、原点に帰って、
「ユーザエージェントによるキャリアの振り分け」
について書こうと思います。

「http://example.jp/」 にアクセスがあった場合、

  • ドコモは 「http://example.jp/i/」 にジャンプ
  • auは 「http://example.jp/au/」 にジャンプ
  • SoftBankは 「http://example.jp/sb/」 にジャンプ
  • それ以外は通常通り「http://example.jp/」を表示

というようなケースはとてもよくあります。

PC版とモバイル版に分けるためというのはもちろんですが、各キャリア用のHTMLや画像を、それぞれのフォルダに用意すればよいので、各キャリアに最適化したサイトの制作が容易になるからです。

下記はそんな振り分けプログラムのサンプルです。

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

if (preg_match('/^J-PHONE/', $agent) or
    preg_match('/^Vodafone/', $agent) or
    preg_match('/^SoftBank/', $agent) or
    preg_match('/^MOT-/', $agent)) {
    // J-PHONE, Vodafone, SoftBankの場合
    $dir = 'sb/';
} elseif (preg_match('/^DoCoMo/', $agent)) {
    // DoCoMoの場合
    $dir = 'i/';
} elseif (preg_match('/UP.Browser/', $agent)) {
    // auの場合
    if(preg_match('/^KDDI/', $agent)) {
        // au(HTML-OK)
        $dir = 'au/';
    } else {
        // au(HDML-Only)
        $dir = 'au/';
    }
} else {
    // その他PC等
    $dir = '';
}

$url = 'http://example.jp/' . $dir;
header('Location: ' . $url);        // 指定ページに移動
exit;

ポイントはauよりも先にソフトバンクを判定することです。
auだけではなく、ソフトバンク端末の中にも「UP.Browser」が搭載されている端末があります。

またソフトバンクの端末の中には「MOT-」から始まる特殊な端末があることにも注意してください。
もっともこの端末のシェアはかなり低いと思われますので、アクセスがあることは少ないでしょう。

今回はPHPのコードをサンプルとして記載しますが、他の言語でも基本は同じです。

 

関連: