utf8でCGIを作る時の注意点
utf8で出力し、入力もおそらくutf8と言うCGIの場合。
使う物。
- use CGI;
- use utf8;
- Encode::Guess;
CGIモジュールを利用してフォームから入力されたパラメータを受け取るが、その値にはutf8フラグがついていない(場合がある。バージョン違いとかで)。
なので、アプリケーションの下準備として、それらの値にutf8フラグを付与する必要がある。(はず)
そこで、以下のようなメソッドを作成した。
sub encode { my ( $self, $word ) = @_; $word or return $word; my $enc = guess_encoding($word, qw/utf8 euc-jp shiftjis 7bit-jis/); if ( ref $enc ) { $word = $enc->decode($word); } else { utf8::decode($word); } return $word; }
第一引数に文字コード未確定の文字列を入れる。
Encode::Guessを使って文字コードを確定できれば、それをutf8に変換して返す。
確定できなければ、utf8であると推定し、無理矢理utf8フラグを付与して返す。
現在のところ、これでうまく行く。