投票設置にあたり、以前使用していたフリー配布CGIを引っ張り出す。
こういう作業はすぐに忘れるので覚書。
設置するこのブログ(アサブロ)は文字エンコードがUTF-8。
しかしCGIはShift-JISを吐き出すため、投票時のコメントが文字化けする。
対策として、CGI同梱のJcode.plをUTF-8に対応したJcode.pmに入れ替え。
併せてCGI内の該当箇所を書き換え。
●冒頭
require './jcode.pl';
↓
use Jcode;
●文字変換部分
&jcode::h2z_sjis (*val);
&jcode::convert(*val, 'sjis', '', 'z');
↓
Jcode->new(*val,"utf8")->h2z->euc;
(※h2z……半角カナ→全角カナ変換)
●注意点
・
jcode::から
Jcode::という、単なる置き換えではダメ。
ここでしばらくつまずいた。(
参考サイト1)
・Jcode.pmで文字列比較などを行う場合、HTMLフォームから受け取るUTF-8の文字列はいったん内部コードをeucにして処理を行う。
Jcode->new(*val)->h2z->utf8;では文字化けは直らない。
また、受け渡す値の文字コードは明示しておいたほうがいい。
省略して
Jcode->new(*val)->h2z->euc;としても、やはり直らない。(
参考サイト2)
・プログラム同梱のログ等のひな形ファイル、xxx.log、xxx.datの文字コードをUTF-8にしておく。すでに作成されたファイルも同様。
でないと、CGIは全て修正されたはずなのに何故文字化けが続く!?と発狂することになる。
読み込んでいるlog、datデータがShift-JISのままなことにようやく気付けてよかった。
ちなみにPerl 5.8からはEncode.pmが標準モジュールとなっているので、いずれこちらも試してみよう。(
参考サイト3)(
参考サイト4)
セコメントをする