携帯サイトを作ろう! -ちょっと詳しいモバイルサイトの作り方-
XHTML+CSSで一歩進んだモバイルサイトを作るテクニックを幅広く紹介☆
このエントリーを含むはてなブックマーク このエントリーをブックマークに追加
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーを含むはてなブックマーク このエントリーをブックマークに追加
最近では携帯サイトはXHTMLで作るようになってきていますが、
そこで指定すべきコンテンツMIMEタイプはどのようにしなければならないか。

これはこのブログや書籍をご購入いただいた方はすでにご存じかと思いますが、
ドコモの仕様に合わせて「application/xhtml+xml」を指定するということでした。

再度説明するとドコモがXHTMLモードになる条件は

①サーバーが出力するHTTPヘッダーを「application/xhtml+xml」とする。
②metaタグの「content」を「application/xhtml+xml」とする。


ことでした。しかし、この方法では、

1. 古い機種によってはエラーになってしまう可能性があること。
2. auやソフトバンクはMIMEタイプを「text/html」としてもXHTMLで動作すること。
3. 「application/xhtml+xml」としなければならないのはドコモのFOMAだけであるということ。


を鑑みると、仕様上「must」でなければならないFOMAを除いては「text/html」でもよい。
という考えもありかと思っています。
そこで、ドコモのFOMAのみ「application/xhtml+xml」を出力するPHPで動作する
プログラムを作ってみました。

USER AGENT DOCOMO SWITCH FUNCTION (user_agent_docomo.php)
まず、ドコモ端末においてmovaとFOMAを判断するプログラムを関数化しました。
以下がソースコード。
ユーザエージェントはmovaが「DoCoMo/1.0…」、FOMAが「DoCoMo/2.0…」です。
user_agent_docomo( )関数にユーザエージェントを投げると、
「foma」 or 「mova」という文字列を返します。
このあたりはPEARライブラリのNet_UserAgent_Mobileを使ってもよいでしょう。

<?php

//┌─────────────────────────────────
//│ [ USER AGENT DOCOMO SWITCH FUNCTION Ver1.0]
//│ user_agent_docomo.php - 2009/01/27
//│ Copyright (C) DSPT.NET
//│ http://www.dspt.net/
//└─────────────────────────────────

//携帯端末のユーザエージェントを判定(ドコモのみmovaとFOMAの判別あり)
function user_agent_docomo($data){
if(preg_match("/^DoCoMo\/1\.0/i", $data))
{
return "mova"; // mova
}
if(preg_match("/^DoCoMo\/2\.0/i", $data))
{
return "foma"; // FOMA
}
else {
return "unknown"; // unknown
}
}

?>



CONTENTS MIME TYPE SWITCH FUNCTION (mime_type.php)
この結果を受け取り、ドコモのFOMAのみ「application/xhtml+xml」の
コンテンツMIMEタイプを返すプログラムの関数は以下。
以下で指定するmime_type( )関数において、fomaが投げられた場合、
「application/xhtml+xml」という文字列を返します。

<?php

//┌─────────────────────────────────
//│ [ CONTENTS MIME TYPE SWITCH FUNCTION Ver1.0]
//│ mime_type.php - 2009/01/27
//│ Copyright (C) DSPT.NET
//│ http://www.dspt.net/
//└─────────────────────────────────

//ドコモのFOMAのみ適切なコンテンツMIMEタイプを出力する
function mime_type($data) {
if($data == 'foma') {
return "application/xhtml+xml";
}
else {
return "text/html";
}
}

?>


以上で必要なプログラムはおしまい。
あとはこのファイルをインクルードして、以下のようなサンプルPHPとして動作させれば、
適正なコンテンツMIMEが指定されたHTMLとなります。

テストプログラム (test_mime_type.php) テストURL

<?php
include ('include/user_agent_docomo.php'); // USER AGENT DOCOMO SWITCH
include ('include/mime_type.php'); // MIME TYPE

include ('include/cache_control.php'); // CACHE CONTROL

//携帯UA取得
$agent = user_agent_docomo($_SERVER["HTTP_USER_AGENT"]);

//HTTPヘッダー
header("Content-Type: ".mime_type($agent));
echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="<?php echo mime_type($agent);?>; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<?php echo cache_control('on','xhtml');?>
<meta name="description" content=" " />
<meta name="keywords" content=" " />
<meta name="robots" content="index,follow" />
<title>MIME TYPE</title>
</head>
<body>

<!--WRAPPER-->
<div style="font-size:x-small;">

UA : <?php echo $_SERVER["HTTP_USER_AGENT"];?><br />
Content-Type: <?php echo mime_type($agent);?><br />

</div>
<!--WRAPPER END-->

</body>
</html>


$_SERVER["HTTP_USER_AGENTにより携帯端末からユーザエージェントを抜き取り、
先ほど2つの関数が書かれたファイルをインクルードします。
あとはHTTPヘッダーとmetaタグのコンテンツMIMEタイプを指定する部分に、
mime_type関数より適正なMIMEタイプを出力します。


CACHE CONTROL SWITCH FUNCTION (cache_control.php)
ちなみに、「cache_control」という関数は、キャッシュコントロールを制御するための
metaタグを適正に出力するというものでおまけ。「include」で読んでいる「cache_control.php」は
以下のようなソースコードになっています。
キャッシュOFFとONの切り替えができるのと、HTMLとXHTMLのmetaタグの切り替え機能がついています。
cache_control('on','xhtml')とすると、キャッシュオフのmetaタグを出力するとともに、
XHTML用のmetaタグを出力します。cache_control('on','html')とすれば、HTML用のmeta
タグを出力します。cache_control('off','***')とすれば、
キャッシュオフのmetaタグを出力しないというよりmetaタグそのものを出力しません。

<?php

//┌─────────────────────────────────
//│ [ CACHE CONTROL SWITCH FUNCTION Ver1.0]
//│ cache_control.php - 2009/01/27
//│ Copyright (C) DSPT.NET
//│ http://www.dspt.net/
//└─────────────────────────────────

//キャッシュコントロール制御
function cache_control($data,$html) {
$meta_line1 = "<meta http-equiv=\"pragma\" content=\"no-cache\"";
$meta_line2 = "<meta http-equiv=\"cache-control\" content=\"no-cache\"";
$meta_line3 = "<meta http-equiv=\"expires\" content=\"-1\"";
if($data == 'on') {
if ($html == 'xhtml') {
$out = $meta_line1." />\n".$meta_line2." />\n".$meta_line3." />\n";
}
else {
$out = $meta_line1.">\n".$meta_line2.">\n".$meta_line3.">\n";
}
return $out;
}
else {
return "";
}
}

?>



なお、ソースコードを保存するのが面倒という方は、
こちらからダウンロードできますので。






管理者にだけ表示を許可する


教えてください
XHTML仕様で携帯サイトを作成する際のコンテンツMIMEタイプ切り替えをhtmlに組み込むにはどうすればよいんでしょうか?
rui | URL | 2009/06/27/Sat 16:39 [EDIT]
ありがとうございます。
とても参考になる記事のご紹介ありがとうございます。

これからも有益な記事の投稿、楽しみにしています。
koji | URL | 2009/02/13/Fri 19:18 [EDIT]
Re : 動画再生について
kojiさん

書き込みありがとうございます。また本のご購入ありがとうございます。
動画については、すみませんが私はあまり知識がありません。
このあたりの記事は最近Think ITが特集してきていますので、
以下の記事などを参考にされてみてはいかがでしょうか。

http://www.thinkit.co.jp/article/151/1/

shiba | URL | 2009/02/13/Fri 16:22 [EDIT]
動画再生について
はじめまして。いつも拝見させてもらってます。
このサイトがきっかけとなり3キャリア対応のモバイルサイトを作ることができました。
本も即効買いました。

この記事とは関係のない質問ですいませんが、、、
現状、動画の再生については3キャリア対応は難しいんでしょうか?

本にも出ていなかったように思いますが、どのように対処するべきでしょう?
koji | URL | 2009/02/13/Fri 15:57 [EDIT]




Copyright © 携帯サイトを作ろう! -ちょっと詳しいモバイルサイトの作り方-. all rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。