目次 | CGIレスキュー | 免責・問合
  携帯サイト作成メモ

カレッヂ
カレッヂ


cgi-lib.plの修正

ezWEBからのフォーム送信(マルチパートではない)では、$ENV{'CONTENT_TYPE'} 値の中に Content-Typeが付いてきてしまうので、正しく解析ができません。そのため、 x-www-form-urlencoded 通信を認識する場合は、次のようにしないとエラーが発生します。

$type eq 'application/x-www-form-urlencoded') {

                       ↓

$type =~ m#^application/x-www-form-urlencoded#) {

フォームデコード時に…

一般的に _ (アンダーバー)は半角英数字に含まれます。 J-SKYでは、フォームで渡される NAME=VALUE で、NAMEに _ を使う場合、 NAMEの部分もURLデコードしないと認識されません。

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

	($name,$value) = split(/=/,$pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;


                       ↓


@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

	($name,$value) = split(/=/,$pair);
	$name =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

ezWEBはキャッシュが利く

ezWEB(無論機種によるかもしれないが)はキャッシュ操作がちゃんとしているようで、 キャッシュを無効にする記述を入れると、同じページにアクセスしたときに再読込してくれる。 逆に入れないと、キャッシュを表示するようだ。

<META http-equiv="Expires" content="0"> ←ただしこの行だけはJ-SKYの一部の機種(※)で「不正な情報を受信しました」になるので避ける
<META http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">

※表示不能になったのはSH52でのアクセス。その他は不明。

ezWEBはクッキーが使える

ezWEBのクッキーは RFC 2109 仕様のようだ。すなわち、Netscapeの仕様とはちと異なる。 「空白や記号を含む場合は値をダブルクォーテーションで囲む」 「新しい属性が用意されている」 「Cookieリクエストヘッダで、$を先頭に付けて属性値を送信する」 「Expires ではなく max-age を使用し、秒数を指定する」 (参考文献)

J-SKYはQUERYと標準入力の同時入力ができない?

実験の結果では、クエリー(GET)と標準入力(POST)が同時に送信された場合、標準入力の値しか取得が出来ないようです。

<form method=post action="test.cgi?QUERY">
<input name=NAME value=VALUE>

以上の状況を把握した上でXHTMLで作成すると…

XHTMLで作成したページをiMODE/ezWEB(WAP1.0)/ezWEB(WAP2.0)/J-SKYでの実験の確認の結果、 いずれも動作できました。もちろん細かい点は機種によると思いますが…。 以前と比べて、現実的にはHTML/CHTML/HDMLというように分ける必要がなくなり、 1つ書けば3キャリアどれでも表示してくれるようです。ただし、 絵文字は共通とは限らない(iMODEの絵文字を指定するとezWEBはかなり近似なものを表示してくれる)ので極力避ける。 また、タグはXHTMLで使えてもiMODEで使えないものは避けるなど、下位コンパチ風にすると成功する確率が高くなる。

余談

iMODE、au(WAP1.0機)、au(WAP2.0機)、Vodafone …と動作確認のために揃えると、 費用がかかるなぁ…(汗)。H"(カード端末の使用の方が多いだろう)やASTELは少数派として、 今回は用意しませんでしたが、そのうち予算があればやってみたいと思っています。 H"はiMODEエミュレーションで動くそうなので、大丈夫なのかな? ちなみに、SO505iS J-D08 A1304T C1001SA で確認した実験結果です。


Powered by CGI RESCUE(R)