Perlで文字コードがUTF-8のフォームを扱うときの注意点
最近では、Webサイト自体の文字コードをUTF-8で制作していることがほとんどですが、
申込フォームなどCGIを使うページでは、以前に作成した、プログラムを流用したいため、そのページだけはEUC-JPで、というような方法でここ2年くらいは対応してきました。
ですが、大抵のサーバーのPerlのバージョンが5.8以上になり、文字化け回避の方法などもいろいろなところで取り上げられてきたので、今回申し込みフォームで、チャレンジしてみました。
要点は以下
・申込フォームは名前と住所、電話番号を受け取って、その内容をメールで送信する
・フォームのHTMLの文字コードはUTF-8
・PerlのCGIプログラムもUTF-8
・Encodeモジュールを使用(encode,decode)
・特定の文字のデコードで不具合が出るので、そこだけは、例外的に対応
use Encode;
use CGI;
#paramメソッドで取得
$name = $query->param(’name’);
$address = $query->param(’address’);
$tel = $query->param(’tel’);
#メールの本文を作成
$body = “【氏名】”.$name.”\n”;
$body .= “【住所】”.$address . “\n”;
$body .= “【電話】”.$tel . “\n”;
#文字をデコード
$message = decode ( ‘utf8′ , $body );
# ~、-など文字化け対策
$message =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a2}\x{00a3}\x{00ac}]/;
#JISコードに変換
$message = encode ( ‘jis’ , $message );
#以降、メールの送信処理
・
・
・
文字化け対策が必要な文字は「~」「∥」「-」「¢」「£」「¬」。住所、電話番号、なので、「~」「-」だけでもよい。
※参考サイト
http://d.hatena.ne.jp/kopug/20060903
渡辺
トラックバック URL :
