2011年5月3日火曜日

perlのstart_formの使うときは注意です。

perlを使ってHTMLのFORMを作成するときに問題が発生したので記載しておく。

対象製品
perl 5.8.8 cgi.pm 3.15

普通cgi.pmを使用してFORMを作成するときは、start_formを使用して記述する。

    my $q = new CGI;
    print $q->header;
    print $q->start_html;
    print $q->start_form(-action=>'myAction.pl');

そうすると以下のように表示される。-enctypeを指定していないのでデフォルトが自動的に適用される。

    form method="post" action="myAction.pl" enctype="multipart/form-data"

このままで動作する環境では何の問題もないのだが、落とし穴があった。
enctypeがこれでは、環境によってPOSTされるデータがおかしな値になってしまうのだ。
HTMLのenctypeについては、別途誰かが記載してるのでぐぐってほしいです。

enctypeを"application/x-www-form-urlencoded"もしくは、指定なしにしたいというの今回の期待だった。

いろいろ調べたが、結論としてcgi.pmの3.15の不具合であることがわかった。
このバージョンはRedhatの特定リビジョンに入っているので注意してほしい。

以下のやり方でもだめ。

    enctype='application/x-www-form-urlencoded'

解決策としてはstart_formをあきらめて、直接HTMLを記述するしかない。
もしくはcgi.pmをバージョンアップするしかない。

ただ、安易にやるとほかのトラップに引っかかるとおもうので、あまり慣れてない人は以下の本を手元においてやると効果的でしっかりしたものが書けると思う。

0 件のコメント:

コメントを投稿