問い合わせフォームをつけたくなって久しぶりにCGIのカスタマイズ。KENTWEBさんで配布されているPostmailを利用させていただきました。
文字コードがShift_jisなので、これをサイトに合わせてutf-8にエンコード。ケヌキブログさんのエントリーを参考にしながら作業開始。verが違うので少し仕様が変わっているが、テスト送信を繰り返しながら変更。とりあえず設定完了したので覚書。
97行目の
require './jcode.pl';
を
use Jcode;;
に変更。
417行目//テンプレ変数変換
&jcode'convert(*tbody, 'jis');
を
&Jcode::convert($tbody, 'jis');
に修正⇒*記号は$に変更。
446行目//本文内容
&jcode'convert(*tmp, 'jis', 'sjis');
を
&Jcode::convert($tmp, 'jis', 'utf8');
に変更⇒*記号は$に変更。
485行目//送信内容フォーマット化
$body .= "Content-type: text/plain; charset=iso-2022-jp\n";
を
$body .= "Content-type: text/plain; charset=utf-8\n";
とcharsetをutf-8に変更。これをしておかないと送信されてきたメール内容が文字化けする。
628行目、629行目//フォームデコード
&jcode'convert(*key, 'sjis');
&jcode'convert(*val, 'sjis');
の行頭に#を挿入して
#&jcode'convert(*key, 'sjis');
#&jcode'convert(*val, 'sjis');
と修正してここのスクリプトを効かなくする。
735行目//チェックモード
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
を
<meta http-equiv="content-type" content="text/html; charset=utf-8">
に修正。これをしておかないと?modo=checkをかけたときにブラウザ上で表示できない。
788行目//BASE64変換
$sub = "=?iso-2022-jp?B?" . &b64enc($sub) . "?=";
を
$sub = "=?utf-8?B?" . &b64enc($sub) . "?=";
に修正。メールヘッダー部分の文字化けを回避。
修正が完了したら、.cgiと.htmlを全てutf-8で保存しなおしてサーバーにアップロードして完了。モードチェックをしてから実際にメールを送信して確認。
*こちらのレン鯖はデフォルトでJcodeがインスコされているので、.cgiの変更と修正だけ行いました。必要に合わせてJcode.plmのインスコが必要。
≪ all done