携帯電話向けサイトでのPHPの応用・端末振り分け(2)。

端末振り分け(1)の別ヴァージョンです。

相違点としては、

が挙げられます。

お持ちのサイトに合せて撰んで下さい。

ソースコードと解説。

<?php
		    $title="サイト名称";
		    $page_e='EZウェブ専用ページのURL';
		    $page_j='ボーダフォン専用ページのURL';
		    $page_i='一般携帯電話対応ページのURL';
		    $page_h='H"リンク専用対応ページのURL';
		    $page_p='PC専用ページのURL';

		    $i=$_SERVER['HTTP_USER_AGENT'];
		    //EZウェブHDML機か。
		    if (preg_match("/UP\.Browser\/[3-5]/",$i)) {
		        header('Content-Type: text/x-hdml;charset=shift_jis');
		        echo('<hdml version="3.0" markable="TRUE" public="TRUE">');
		        echo('<nodisplay markable="TRUE" public="TRUE" title="$title">');
		        echo('<action type="ACCEPT" task="GO" dest="'.$page_e.'">');
		        echo('</nodisplay>');
		        echo('</hdml>');
		        exit();
		        }

		    //ボーダフォン在来機か。
		    if (preg_match("/J-PHONE\//",$i)) {
		        header("Location: $page_j");
		        exit();
		        }

		    //H"リンクか。
		    if (preg_match("/PDXGW\//",$i)) {
		        header("Content-Type: text/plain");
		        echo("From: $page_h\n");
		        echo("Subject: $title\n");
		        echo("Content-Type:Text/X-PmailDX\n");
		        echo("\n");
		        echo("<SEL=99;$page_h>\n");
		        echo("<BODY=000000;BG=FFFFFF>\n");
		        echo("$title\n");
		        echo("\n");
		        echo(" いらっしゃいませ。ご訪問ありがとうございます。\n");
		        echo(" ------------\n");
		        echo("99⇒メニュー\n");
		        echo("「99」を入力して下さい。\n");
		        exit();
		        }

		    //iモード/EZウェブ次世代機/エアーH"フォンなどの携帯端末一般。
		    if (preg_match("/DoCoMo\//",$i) ||
		        preg_match("/UP\.Browser/",$i) ||
		        preg_match("/\AVodafone/",$i) ||
		        preg_match("/\ASoftBank/",$i) ||
		        preg_match("/\AMOT-/",$i) ||
		        preg_match("/DDIPOCKET;/",$i) ||
		        preg_match("/WILLCOM;/",$i) ||
		        preg_match("/L-mode\/\//",$i)) {
		        header("Location: $page_i");
		        exit();
		        }

		    //オペラ他フルブラウザ搭載の携帯端末。
		    if (!(preg_match("/(Win|Mac|X11|BrightV)/",$i))) {
		        header("Content-Type: text/html;charset=shift_jis");
		        echo("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n");
		        echo("<html lang=\"ja\">\n");
		        echo("<head>\n");
		        echo("<title>$title</title>\n");
		        echo("</head>\n");
		        echo("<body>\n");
		        echo("<h1>$title</h1>\n");
		        echo("<ul>\n");
		        echo("\t<li><a href=\"$page_i\">モバイル版</a></li>\n");
		        echo("\t<li><a href=\"$page_p\">PC版(端末向けに最適化されます)</a></li>\n");
		        echo("\t</ul>\n");
		        echo("</body>\n");
		        echo("</html>\n");
		        exit();
		        }

		//PCサイトへのリダイレクト。
		header("Location: $page_p");
		?>
  • EZウェブのHDMLブラウザのヴァージョンによっては、Locationフィールドに依るリダイレクトではリダイレクト先の相対アドレスを正しく処理できないものがあります(勿論、Locationフィールドの値は絶対アドレスにしなければならない事は言うまでもありませんが、正しく絶対アドレスで表記しても正常に処理できないのです)。このため、HDML独自のリダイレクト機能を持つHDMLデッキを発行します。
  • ボーダフォン在来機は一般の携帯電話向けとは異なるリソースとなる為、HTTP応答ヘッダのLocationフィールドを出力する事で別々のページに移動させます。
  • オペラブラウザ搭載の携帯機器は、ユーザエージェント文字列に「Opera」が含まれ、且つ「Win」「Mac」「linux」などのデスクトップOS名をいずれも含まない場合(つまり、これらのOSではない場合)とし、この場合はPC版とモバイル版の選択ページを発行します。
  • H"リンクに関しては、HTTP応答ヘッダにおけるLocationフィールドが機能しないので、オープンネットコンテンツフォーマットのリンクページを発行しています。
  • その他の携帯端末(iモード含む)は一般用携帯端末向けページへリダイレクトします。
  • その他はデスクトップと見做して、PC版のトップページへリダイレクトします。