トップページ | HTML5編・目次

●既存のIE(v8以下)にXHTML5文書を読み込ませる

 HTML4.01や XHTML1.0、XHTML1.1 とは異なり、HTML構文の文書かXML構文の文書かの選択はXML宣言や文法によって決定されるものではなく、どのMIME Type を選択するかによって影響されます。

 WebサーバとWebサーバ間でやり取りされるデータの中にはHTTPヘッダ情報があることは別項(HTML5におけるMIMEタイプ)にて解説しました。HTML構文で書かれたHTML5文書は、HTTPヘッダのContent-Typeが"text/html"として配信されるので問題ないとして、XML構文のHTML5文書(XHTML5文書)の場合、HTTPヘッダは"application/xhtml+xml"の“Content-Type”の値を返すブラウザがあることも説明しました。将来的には解決されるとは思いますが、現状においては文法に沿ったXHTML5文書を公開するには一工夫が必要です。本稿はひとつの対応策に過ぎません。

 従来、HTTPヘッダに“Content-Type”の情報を与える方法として、HTML4.01やXHTML文書で指定したように、meta要素にHTTPヘッダ情報を付加させる方法がありました。例えば、次のような指定です。

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 これは、http-equiv属性の値にHTTPヘッダ用のプロパティの種類(名前)を指定し、 content属性の値にそのHTTPヘッダ用のプロパティで指定した値を指定するというものです。うまく動作してくれればいいのですが、meta要素の“http-equiv”での“content-type”の指定は記述すべきでないとされています。それにmeta要素によるhttp-equiv属性の指定はサーバが必ずしもHTTPヘッダとして送信するわけではなく、実際にはWebブラウザ側でチェックするとされています。また、HTML 5 からはURLの定義として‘Content-Type スニッフィング’の定義が取り出され、IETFで開発を進めることになったためかどうかわかりませんが現在、meta要素による“http-equiv”属性の指定は文法的にエラー扱いとなっています。以下の指定はいずれもエラーとなり、HTML5文書では指定することはできません。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />

 指定できたとしてもブラウザ側で判断するわけですからこの文書は"application/xhtml+xml"の"Content-Type"と判断してねと指定してもHTTPヘッダが"text/html"でレスポンすれば指定しても意味がないことになります。かといって、厳密なXML構文のHTML5文書(XHTML5文書)は拡張子「.xhtml」のファイルです。拡張子「.xhtml」のファイルはMIME typeが"application/xhtml+xml"になり、IE9は"application/xhtml+xml"のMIME typeに対応しますがv8以下のIEは"application/xhtml+xml"のMIME typeを認識しません。結果的にv8以下のIEで表示されないというわけです。

 そこでXHTML5文書をWebページとして表示されるよう、対応策を考えます。それにはサーバサイドの設定を変更します。

 ネットでサーチしてみるとContent-Type のMIME Type に"application/xhtml+xml"として解釈されるようにするには、「.htaccess」ファイルによる設定がありました。ありがたいことです。基本的には、IEのブラウザだけに"text/html"として認識されるように「.htaccess」ファイルで設定します。ただし、2011年6月21日に自動配信が開始されたIE(v9)は"application/xhtml+xml"のContent-Typeに対応していますのでちょいとカスタマイズして、v8以下のIEだけにContent-Type が"text/html"になるように変更してみました。コードは次のようになります。

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} "MSIE 5" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 6" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 7" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 8"
RewriteCond %{REQUEST_URI} \.xhtml$
RewriteRule .* - [T=text/html]

 こんな感じです。これなら、v9のIEには"application/xhtml+xml"として認識され、"application/xhtml+xmlに未対応のv8以下のIEには、"text/html"のContent-Typeとして振り分けることが可能です。

ダウンロード

 ※:ダウンロードファイルは、「ht.access.txt」のテキストファイルです。表示されたらPCの適当な場所に保存してください。(ツールバー「ファイル」→「名前を付けて保存」)それをそのまま、FTPクライアントを利用してXHML5文書を設置したディレクトリにアップロードした後に、FTPクライアントの機能を使って、サーバ側で「.htaccess」にリネームしてください。なお、動作環境はサーバがApacheで.htaccessファイルが設置できる環境です。文字コードは“urf-8”で作ってありますがうまく動作しない場合や文字化けする場合は文字コードをサーバの環境に合わせてください。

■参考サイト

XHTML を IE に読み込ませるには? | Diaspar Journal
http://diaspar.jp/node/225
ヒント: XHTML に対して適切な MIME タイプを送信するように Apache を構成する
http://www.ibm.com/developerworks/jp/xml/library/x-tipapachexhtml/
internet explorer - Redirect IE browsers using .htaccess (away from an xhtml) - Stack Overflow
http://stackoverflow.com/questions/4054688/redirect-ie-browsers-using-htaccess-away-from-an-xhtml

■参考

サイト・目次 | HTML5編・目次

Copyright (C) 2011 http://www.xml.vc/ All Rights Reserved.