XHTMLでモバイルサイトを制作する際の注意とtips
とくに、PHP での開発において、ざっとメモ。
(PHP×携帯サイト デベロッパーズバイブルを参考に)
1. XML 宣言が必要
<?xml version=”1.0″ encoding=”Shift_JIS” ?>
2. キャリア、端末によって DOCTYPE 宣言を書き換える必要がある
Docomo / iモードXHTML1.0
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN” “i-xhtml_4ja_10.dtd”>Docomo / iモードXHTML1.1
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN” “i-xhtml_4ja_10.dtd”>Docomo / iモードXHTML2.0
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.0) 1.0//EN” “i-xhtml_4ja_10.dtd”>Docomo / iモードXHTML2.1
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.1) 1.0//EN” “i-xhtml_4ja_10.dtd”>Docomo / iモードXHTML2.2
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.2) 1.0//EN” “i-xhtml_4ja_10.dtd”>Docomo / iモードXHTML2.3
<!DOCTYPE html PUBLIC “-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.3) 1.0//EN” “i-xhtml_4ja_10.dtd”>au
<!DOCTYPE html PUBLIC “-//OPENWAVE//DTD XHTML 1.0//EN” “http://www.openwave.com/DTD/xhtml-basic.dtd”>SoftBank
<!DOCTYPE html PUBLIC “-//JPHONE//DTD XHTML Basic 1.0 plus//EN” “xhtml-basic10-plus.dtd”>
3. Content-Type の書き換えも必要
通常(デフォルト)では、Content-Type は text/html になる。
XHTML を使用する場合はこれを application/xhtml+xml としないといけない。
対応する部分は以下の二箇所。
- meta タグによる Content-Type の指定
- HTTP レスポンスの Content-Type フィールドにおける指定
具体的には、
meta タグでは以下を記述
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset='Shift_JIS'" />HTTP レスポンスヘッダーに以下のような Content-Type を指定(これは PHP の場合)
header(‘Content-Type: application/xhtml+xml;’);
この PHP の header 関数は、全ての出力の「前」に呼び出される必要がある。
4. mb_output_handler に注意(文字化け)
PHP での開発において mb_output_handler(出力時の文字コードの変換を行ってくれる関数)を使うことが出来ない。
HTTP レスポンスヘッダーの Content-Type に application/xhtml+xml が記述されているときは、この関数は機能しないので使うことが出来ないので注意。(ようするに、XHTML を使おうとするときは、この関数は使えないということ)
5. mb_output_handler を利用せずに文字コード変換
以下のスクリプトを使用して、内部文字コードを出力文字コードに一括変換する。
詳しい実例は初めてのXHTMLによるモバイル向けページの作成を参照。
*この際、mb_output_handler を無効にしておくこと。
(php.ini の mbstring.http_output = pass にしておく)
*プログラム内で一時的に mb_output_handler を無効にするには
ini_set(‘mbstring.http_output’, ‘pass’);
// 出力バッファリングを有効に ob_start(); // バッファにためた出力データを取得する $str = ob_get_contents(); // 文字コードを出力文字コードに変換する $output_str = mb_convert_encoding($str, 'SJIS-win', mb_internal_encoding()); // バッファリングをクリア ob_end_clean(); // 内容を出力する echo $output_str;

Comments
No comments so far.