Perlで作ったCGI、NetScape上の動作で悩んでおります。
[上に]
[前に]
[次に]
きょし
[E-Mail]
2000/04/05(水) 11:13:33
先日、DMさんに以下のようなことを教えていただきました。
・NetScapeでは フォームで
action=filename?get_string をサポートしていない
さらに下のような対応も教えていただきました。
<FORM ACTION=\"./test.cgi?$FileName\" METHOD=POST>
という記述でなく
<FORM ACTION=\"./test.cgi\" METHOD=POST>
<INPUT TYPE=HIDDEN NAME=\"FileName\" VALUE=\"$FileName\">
とする
この記述法で全く問題なくNetScapeでも使用できました。
しかし今度は
<FORM ACTION=\"./test.cgi?$FileName\" METHOD=POST>
ではなく
<A HREF=\"./test.cgi?$FileName\" METHOD=POST>
と指定しようとしてつまづいてしまいました。
<A HREF=\"./test.cgi\" METHOD=POST>
<INPUT TYPE=HIDDEN NAME=\"$FileName\" VALUE=\"$FileName\">
では、もちろんFileNameは渡ってくれませんでした。
何か良い方法は無いでしょうか。
しつこくて申し訳ないのですが、
ご存知の方、ご教授お願い致します。
ジャズ
2000/04/05(水) 11:19:22
A要素はリンクを張るために使います。
フォームの送信はJavascriptと組み合わせないとできません。
aaa
2000/04/05(水) 12:42:36
>・NetScapeでは フォームで
> action=filename?get_string をサポートしていない
本当ですか?
CGI側で処理していないだけでは?
<A HREF=\"./test.cgi?$FileName\">だけで行けませんか?
(AタグからのMETHODはGETオンリーです。)
きょし
2000/04/05(水) 13:05:08
ジャズさん、aaaさん、ありがとうございます。
AタグはGETオンリーでしたか。
<A HREF=\"./test.cgi?$FileName\">
と記述すると、IEではうまくいくのですが、
NetScapeではerror404となってしまいます。
$FileNameが
[./../../../../test/test01/test2/test.dat]
のように長いのですが、そこに原因があるのでしょうか。
何か対策があれば教えていただきたいのですが・・・
H&A
2000/04/05(水) 13:25:53
> <A HREF=\"./test.cgi?$FileName\">
> と記述すると、IEではうまくいくのですが、
> NetScapeではerror404となってしまいます。
おそらく、URI の query 部を正しく解釈できないか、「ユーザが間違った指定をしてもできるだけ親切に処理してあげよう」という動作の副作用だと思います。
URI の文法的には query に "/" "." などの文字を含むこともできるので、きょしさんの指定には間違いはないでしょう。
対策としては、$FileName をエスケープ("URL エンコード")してしまう方法が考えられますね。
きょし
2000/04/05(水) 13:42:39
H&Aさん、ありがとうございます。大変勉強になっております。
でも、「URLエンコード」の具体的な方法がわからず、
難儀しております。
また、実際CGIに渡す値は$FileNameだけではなく、その後に
ずらずらと続くのですが、
「URLエンコード」が対策として有効でしょうか。
初心者的な質問ばかりで申し訳ないのですが、
再度よろしくお願い致します。
aaa
2000/04/05(水) 13:45:03
>[./../../../../test/test01/test2/test.dat]
>のように長いのですが、そこに原因があるのでしょうか。
そうみたい!?
以下をみてみてください。
../200004/00040066.htm
たれ
2000/04/05(水) 13:45:25
>「URLエンコード」が対策として有効でしょうか。
バグの原因となり得る物は極力つぶしておいたほうが
いいですよ〜。
エンコードについては
http://www.tohoho-web.com/wwwcgi3.htm#CgiEncode
あたりに書いてあります。
きょし
2000/04/05(水) 15:14:19
aaaさん、たれさん、ありがとうございます。
エンコードのページも参考になりました。
試験的に手入力でエンコードした文字列を渡した所、
やっとNetScapeでも正常な結果が得られました。(T-T)
<A HREF=\"./test.cgi?$FileName\">
この$FileNameに無理やり
"..%2F..%2F..%2Ftest%2Ftest2%2Ftest.dat"
という文字列をあてがっただけなのですが・・・
任意の文字列をエンコードする場合、
やはりJavaScriptを使用するしかないのでしょうか。
その場合
<A HREF=\"./test.cgi?$FileName\">
でコールしていた"./test.cgi"も
JavaScript内でコールすることになるのでしょうか。
ヒソカ
2000/04/05(水) 15:35:27
URLエンコードがわからないなら
submitでPOSTする方法検討したほうがスッキリするんじゃ?
きょし
2000/04/05(水) 16:37:13
[[解決]]
ヒソカさん、ご意見ありがとうございます。
いろいろな所で勉強して、
何とかJavaScriptを使用せずに
エンコードすることができました。
(要はハードコーディングなのですが)
1日悩みましたがこれでうまくいきそうです。
今後は作成段階でNetScapeとIE、
両方に注意を払って作れるように心がけます。
今回、たくさんの方々に助言をいただき、本当に助かりました。
いろいろ挑戦して早くスキルアップし、皆さんのように
誰かのお役に立てれば、と思います。
本当にありがとうございました。
[上に]
[前に]
[次に]