2005年03月25日
mod_perl + encodingプラグマでサイト全体が文字化け
perl5.8から導入されたencodingプラグマを利用してSTDOUTの文字コードを透過的にエンコーディングして出力するようなスクリプトをmod_perl環境で実行すると、encodingプラグマの影響がそれを実行したapacheプロセスに残ってしまい、それ以降に実行されるすべてのスクリプトもこの影響を受けてしまうようです。
仮にEUCでサイトを構築していた場合、
#!/usr/bin/env perl use strict; use encoding 'euc-jp', STDOUT => 'utf8'; print "Content-type: text/html; charset=utf8;\n\n"; print "こんにちは";
のようなスクリプトを実行してしまうと、このスクリプトを実行したApacheの子プロセスにおいて、それ以降のすべての出力がUTF8にエンコーディングされてしまい、結果サイトが文字化けしてしまうことになります。
mod_perl環境ではencodingプラグマは使用しないで、JcodeとかEncodeモジュールを利用するほうがよさそうです。
- Jcodeを使う場合
#!/usr/bin/env perl
use strict;
use Jcode;
print "Content-type: text/html; charset=utf8;\n\n";
print Jcode->new("こんにちは", 'euc')->utf8;
- Encodeのfrom_toを使う場合
#!/usr/bin/env perl use strict; use Encode; my $str = "こんにちは"; Encode::from_to( $str, 'euc-jp', 'utf8'); print "Content-type: text/html; charset=utf8;\n\n"; print $str;
Continuing the discussion...
このエントリーのトラックバックURL:
http://hori-uchi.com/mt/trackback/307
このリストは、次のエントリーを参照しています: mod_perl + encodingプラグマでサイト全体が文字化け:
hori-uchi.com: mod_perl + encodingプラグマでサ...
続きを読む: mod_perlでencodingプラグマを使わないように
from HT::Blog at 2005年03月25日 08:45
