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に入ります。
わかりました。
しなのむしさん、ありがとうございました。
フシギダネさん、わかりやすい例で、ありがとうございました。
[上に]
[前に]
[次に]