Pythonのcgiモジュールでセミコロンだけを含む値が取れない→「セミコロンで始まる値が取れない」が正解

解決:セミコロンもデリミタとして使われるのだそうだ。知らなかった。それとcgi.FieldStorageがデフォルトの設定では空のフィールドを無視するようになっているのでこういう現象が起きたらしい。


下のようなCGIに「?query=play&hands=1,2,3,4&played=;;&seat_id=hoge」なんてクエリを渡すと「playedなんてフィールドはない」というエラーになる。
print queryでは正しく「query=play&hands=1,2,3,4&played=;;&seat_id=hoge」と表示されているのでcgiモジュールの中で何かなっているっぽいんだが追いかける時間がないので書くだけ書いておく。「;;」が「1;2;3」や「..」や「__」だったら起きないので「セミコロンだけで構成される値」に特有な現象みたいなんだけど謎だ。とりあえず今日のところは区切り文字をセミコロンじゃなくてピリオドにすることで回避しておく。

import cgi
import cgitb
cgitb.enable()
print "Content-Type: text/html"
print
import os
query = os.environ["QUERY_STRING"]
print query

form = cgi.FieldStorage()
(中略)
form["played"]