CGIでUTF8の入力データを受け取ると文字化け

CPANCGIモジュール3.15では問題なかったんだけど、3.29にしたら突然問題発生。UTF8でデータをブラウザから受け取り、CGIモジュールのparam関数でデータを取得すると、「wide character print」みたいなapacheエラーが発生。


前回(http://d.hatena.ne.jp/ichikaway/20070528)のCGIモジュールのHTMLescape関数の際に設定した、
$cgi->charset('utf-8');
が問題だったみたい。


chasetでutf-8をセットすると、param関数で取得したデータにutf-8フラグが立ってしまい、それをprintすると文字化けして、上記のエラーログが出る。どうするかなぁと思って、とりあえず下記の2つを検討する。

1. $cgi->charset('utf-8');を$cgi->charset('UTF-8');に書き換え(UTFの文字を大文字にしただけ)
2. HTMLescape関数は使わず、$cgi->charset('utf-8');を消して、タグエスケープの関数を独自実装する

2をしておいたほうが、後からaタグのみ許可みたいに出来るので2を選択したほうがいいかなと思うが、今はちょっと時間がないのでとりあえず1で応急処置。


参考リンク
http://cyberlib.enterbrainz.com/1178086411.html
http://blog.nomadscafe.jp/archives/000491.html