CGIぽん
モバイルCGI研究(EZweb編)
2001年9月2日更新

HDML失敗例

目次


はじめに

このページでは HDML を用いて EZweb 用のページを作成する際にぶち当たる問題点の例を取り上げています。トラブルに見舞われたら、とりあえずこのページに挙げてある項目を1つずつ確認してみてください。

HDML の動作確認・バグつぶしには Openwave の UP.Simulator がお薦めです。このソフトを使えば、 HDML がコンパイルエラーになった場合に、メッセージウィンドウ( "Phone Information" と書いてある黒いウィンドウ)にエラーメッセージと、そのエラーを含む行番号が表示されます。


<HDML> タグの記述ミスによる失敗

version オプションを指定しているか?

<HDML> タグの version オプションを指定していない場合、コンパイルエラーになります。特殊な機能を用いていなければ "version=3.0" でうまくいきます。

public オプションを指定しているか?

<HDML> タグの public オプションを "true" にしていない場合、その HDML デッキは特定のサーバからしかリクエストできないことになります。

markable オプションを指定しているか?

<HDML> タグの markable オプションを "true" にしていない場合、その HDML デッキは「お気に入り」に登録できないことになります。なお、 "markable=true" と書いておけば、"public=true" は省略できます。


不要なタグによる失敗

<HR> タグを書いていないか?

HDML には <HR> タグはないので、勝手に書くとコンパイルエラーになります。 <HR> タグの代用としては "<CENTER>--------<BR>" または高さ 1px の画像などを用いるのがいいでしょう。

CGI を使えるのなら、環境変数 "HTTP_X_UP_DEVCAP_SCREENCHARS" を用いて表示可能な桁数を調べることができますので、以下のようなスクリプトで $hr という変数を作り、 <HR> タグの代用をさせるとよいでしょう。

Perl
# テキスト罫線 $hr の作成

($screen_x,$screen_y) = split(/,/,$ENV{'HTTP_X_UP_DEVCAP_SCREENCHARS'});
$hr = '-' x $screen_x . '<BR>';

閉じる必要のないタグを閉じていないか?

<CENTER> 、 <RIGHT> 、 <LINE> 、 <WRAP> などのタグは閉じる必要がないので、 "</CENTER>" 、 "</RIGHT>" 、 "</LINE>" 、 "</WRAP>" などを書くとコンパイルエラーになります。なお、 <CENTER> と <RIGHT> は改行によって解除され、 <LINE> は <WRAP> で、 <WRAP> は <LINE> で、それぞれ解除されます。


タグの位置が不適切なことによる失敗

CHOICE カードの <CE> タグ以降に <BR> タグを書いていないか?

CHOICE カード内の <CE> タグには成形テキストを1つしか入れられないので、 <CE> タグ以降では <BR> タグを使えません。 <CE> タグ内のテキストがスクロールするのを防ぎたければ、 <CE> タグのすぐ後ろに <WRAP> タグを書けば大丈夫です。

最初の <CE> タグが出てくるまで(<CHOICE> タグと <CE> タグの間)は選択肢以外のテキストを収めることが出来るので、 <BR> タグを書いてもエラーになりません。

<ACTION> タグをカード(もしくはデッキ)の先頭に書いているか?

<ACTION> タグは、カード(もしくはデッキ)の先頭、すなわち、 <HDML> 、 <DISPLAY> 、 <CHOICE> 、 <ENTRY> 、 <NODISPLAY> タグのすぐ後に書く必要があります。


タグ内のオプションの記述ミスによる失敗

オプションの値をクオートで囲んであるか?

オプションの値が空白(半角スペース)を含んでいる場合には、シングルクオート(')またはダブルクオート(")で囲む必要があります。また、2バイト文字を含んでいる場合もクオートで囲んだ方がいいでしょう。

2バイト文字は URL エンコードしてあるか?

label オプションや default オプション以外の値に2バイト文字を使う場合には、 URL エンコード(本当は URI エスケープと言うらしい)をする必要があります。

↓こちらのフォームに文字列を入力して送信すれば、 URL エンコードした結果を表示します。どうぞご利用下さい。

特殊文字は URL エンコードしてあるか?

オプションの値に含まれる "<"、">"、"$"などの文字は URL エンコードする必要があります。

必要なオプションを書き忘れていないか?

<ACTION> タグ内で、 label オプションを省略できない場合があるので、注意が必要です。

typelabel
accept任意
help必須
prev無視
soft1必須
soft2必須
send必須
delete必須


特殊文字の記述ミスによる失敗

特殊文字(予約文字)をエスケープしているか?

HDML にはいくつかの予約文字があるので、ソース内では次の表にあるように書き換えなければなりません。最後のセミコロン(;)の書き忘れに注意。

文字 エスケープシーケンス
< &#3c; または &lt;
> &#3e; または &gt;
" &#22; または &quot;
& &#26; または &amp;
$ &#24; または &dol;


データ量・データ形式による失敗

HDML ファイルの拡張子は ".hdml" になっているか?

ファイルの拡張子が ".hdml" になっていないと、 HDML ファイルとして認識されないことがあります。

正しい HDTP ヘッダが出力されているか?

端末側で HDML ファイルと認識されるためには、 HDTP ヘッダが出力されている必要があります。 HDML 対応のプロバイダで HDML ファイルを出力するときは特に気を付ける必要がありませんが、 CGI でファイルを出力するときや、自分でサーバの設定をするときには気を付けてください。

Perl
# HDTPヘッダの出力例

print "Content-type: text/x-hdml;charset=Shift_JIS\n\n";

データ量はオーバーしていないか?

EZwebでは、モノクロ端末で 1.4KB 、カラー端末で 7.5KB が上限値です。 UP.Simulator でコンパイル後のデータ量をチェックすることができますが、実機と多少異なるらしいので、 1.2KB 程度を目安に設計した方がいいようです。

文字コードは正しいか?

EZweb で認識できる(日本語の)文字コードは Shift_JIS のみです。( EUC-JP も使えそうですが、未確認です。)


関連リンク

公式サイト
EZweb ホームページを作ろう!
EZweb コンテンツを作ろう!
Openwave(旧Phone.com)
au ホームページ
KDDI Group [ TU-KA ]
非公式サイト
W@P解説ページ
テイク・イット・EZweb(ケータイWatch)
WAP広場WAPでわっぷっぷ
CGIぽん
モバイルCGI研究(EZweb編)おおまかな話
モバイルCGI研究(EZweb編)端末情報一覧
モバイルCGI研究(EZweb編)環境変数リファレンス

このページの履歴

2002.09.14
関連リンクを修正
2001.09.02
<HR> タグの代用として画像の使用を追加。
次の項目の修正。ご迷惑をおかけしました。
- label オプション以外にも、default オプションで2バイト文字をそのまま書いていいらしい。
2001.07.23
初版。

CGIぽんはINFOJAMの安価で快適なサーバを利用しています。