CGIの引数の ? の意味は?

[上に] [前に] [次に]
ラウォッチ [E-Mail] [HomePage] 2000/03/06(月) 20:54:29
いつもお世話になっております。

たとえば、 qanda.cgi?modefg=9 のように、
CGIの引数に ? を普段何気なく使っていますが、
この ? はエンコードが必要ですか。
また、? はCGIの仕様ですか。

ちょっと、気になったもので...。教えて下さい。

ユニオン 2000/03/06(月) 22:11:57
> たとえば、 qanda.cgi?modefg=9 のように、
> (略)
> この ? はエンコードが必要ですか。

特に必要ないです。

> また、? はCGIの仕様ですか。

HTTPの仕様だと思います。
少なくともCGIの仕様じゃないんじゃないかなぁ・・・?

#調べてないので出鱈目言ってるかも・・・(^^;

フシギダネ 2000/03/07(火) 21:44:39
qanda.cgi?modefg=9の?はエンコード不要ですが、?という文字をPOSTするにはエンコードが必要になります。
同じく&や+等も同様です。

Ichi 2000/03/08(水) 07:09:26
?&+等は特別な意味を持った、予約された文字です。ただの文字として使う時は、
エンコードしなくてはなりません。
RFC2068辺りが参考になるかも。

ラウォッチ 2000/03/08(水) 10:35:01
みなさん、ありがとうございました。

私の本には以下の感じで書いてあって、? は出ていませんでした。

[URLエンコーディング]
A〜Z、a〜z、0〜9、* - . @ _ はそのまま。
半角スペースは + に変換。
名前と値を1対として、区切りは &。
名前と値の区切りは =。
その他はすべて % に16進の2桁の文字コード。
たとえば、「あ」0x2422なら %24%22になります。
ただし、+&=%が値の中にあったときはその他扱い。

で、?は 「+&=%と同じ感じで、?以降はCGIの引数です」
という意味で間違えないですか?

フシギダネ 2000/03/08(水) 21:38:33
例えば、modefgに?+&=%という文字を送るとして

qanda.cgi?modefg=?+&=% は間違い。
qanda.cgi?modefg=?%2B%26%3D%25 が正解。

ご理解頂けました?

フシギダネ 2000/03/08(水) 21:40:01
うそです。
もとい

例えば、modefgに?+&=%という文字を送るとして

qanda.cgi?modefg=?+&=% は間違い。
qanda.cgi?modefg=%3F%2B%26%3D%25 が正解。

ご理解頂けました?

しなのむし 2000/03/09(木) 07:05:11
>> この ? はエンコードが必要ですか。
>特に必要ないです。

特に必要ないというより、エンコードしちゃ駄目でしょう。
hoge.cgi?をhoge.cgi%3FとしたらURLが変わってしまいます。

>qanda.cgi?modefg=9の?はエンコード不要ですが、
>?という文字をPOSTするにはエンコードが必要になります。

一般的に、URLエンコードを自力でする必要がある状況は
URLを直接指定してGETする場合でしょう。


ラウォッチさんの本の説明で良いと思います。

>?は「+&=%と同じ感じで、?以降はCGIの引数です」

GETの場合、hoge.cgi?の?までがスクリプトのURL、
?より後ろの部分は環境変数QUERY_STRINGに入ります。
ちなみに、英数字と*-._以外はURLエンコードが必要です。
(区切り等の特殊用途除く)

しなのむし 2000/03/09(木) 07:27:13
見落とし。

>A〜Z、a〜z、0〜9、* - . @ _ はそのまま。
@はそのままじゃない。(多分)

ラウォッチ 2000/03/09(木) 08:52:22
[[解決]]
>特に必要ないというより、エンコードしちゃ駄目でしょう。
>GETの場合、hoge.cgi?の?までがスクリプトのURL、
>?より後ろの部分は環境変数QUERY_STRINGに入ります。

わかりました。

しなのむしさん、ありがとうございました。
フシギダネさん、わかりやすい例で、ありがとうございました。

[上に] [前に] [次に]