URIエスケープ

一部の人以外置いてきぼりシリーズ

Perlメモ(http://www.din.or.jp/~ohzaki/perl.htm#JP_Escape)を読んでいて、自分のミスを発見。

今までURIエスケープには、URI::Escapeモジュールを使ってたけど、CGIを書くにはそれだけでは不十分だった。RFCで定められた文字だけをエスケープすると以下のようなミスを孕むことになる。
CGIに name:a value:'foo&bar'という値を渡したいとき

RFC通りのエスケープを行う(URI::Escape)
http://hoge.jp/hoge.cgi?a=b&c

正解は、
・pack と unpack を用いてあらかじめ、エスケープしておいたものを '=' と '&' で連結する。
http://hoge.jp/hoge.cgi?a=b%26c

今まで知らなかったとはいえ、これは致命的ミスだ。今までに作ったやつが心配。今日から修正だ。気をつけよう。。。