KENT-WEBさん。
しばらく前ですが、CGIを勉強し始めた頃にも既に存在していて、今も存在しています。
大人気ですね。素晴らしいサイトです。
さて、今回はKENT-WEBさんが配布していらっしゃるフォームからのメール送信を行うフリーソフトウェアを改造します。といっても、改造と言えるかどうかはわかりません。単に文字コードを変更しただけです。ですが、そういう問題に直面している方が私も含めて多いので作業の記録を残すことにします。
スポンサードリンク
いま自分が居る環境だと、なぜUTF-8でないのかと思ってしまうのだけれども、同じようにKENT-WEBさんの掲示板の中でなぜUTF-8なのかという文句もありました。また、既にあるUTF-8で記述されたスクリプトではダメなのか、というものもありました。確かにそうなのですが、なかなかライセンスの問題などでクリアできないものが多くあります。勉強になりますね。
さて、今回はCakePHP内で利用したいのでUTF-8にしました。webroot内で使う分にはShift-JISでも良いのですが、pages内に置きたいので、index.htmlをctpファイルにし、トリガにして起動させたいと思ったわけです。テストではとりあえずOKなのでまぁいいのかな、と思っている次第です。完全にテストしていないので、もしかしたら使っている間になにか問題が出てくるかもしれません。ちなみに、今回はsakuraインターネットで利用します。
◆初期状態(マニュアルより引用、全てShift-JIS)
public_html / index.html (トップページ等)
|
+– postmail / postmail.cgi [705]
| postmail.html
|
+– lib / jcode.pl [604]
| mimew.pl [604] … 任意
| io-socket.pl [604]
|
+– data / log.cgi [606]
|
+– tmpl / body.txt
conf.html
err1.html
err2.html
thx.html
◆改変後のファイルと文字コード
public_html / index.html (トップページ等)
|
+– postmail / postmail.cgi (UTF-8)
| postmail.html → /app/views/pages/好きな名前.ctp (UTF-8、不必要な部分を削除)
|
+– lib / jcode.pl (変更なし)
| mimew.pl (変更なし)
| io-socket.pl (変更なし)
|
+– data / log.cgi (変更なし)
|
+– tmpl / body.txt (Shift-JIS:変更なし)
conf.html (UTF-8)
err1.html (UTF-8)
err2.html (UTF-8)
thx.html (UTF-8)
- ctpファイルにする場合は余計な部分を削除しないとCakePHPが怒る
- 他のhtmlはドキュメントの宣言等を変更する
- body.txtは変更すると文字化けする
◆postmail.cgiの変更箇所
すべてJcode.pmで統一しても良いんだけども、できるだけ原型を留めたいので。
ヌケがあったり、最初からそのままだったものもあるかも。。。
—
(宣言部分にJcode.pmを入れる)
require ‘./lib/jcode.pl’;
use Jcode;
—
(これは元からあったかも)
# テンプレ変数変換
$tbody =~ s/\$date/$date1/;
$tbody =~ s/\$agent/$agent/;
$tbody =~ s/\$host/$host/;
&jcode::convert(\$tbody, ‘jis’);
—
(受け取りをUTF-8にしているので本流のSJISに戻しておく)
# 本文内容
local($tmp);
if ($in{$_} =~ /\n/) {
$tmp = “$_ = \n\n$in{$_}\n”;
} else {
$tmp = “$_ = $in{$_}\n”;
}
# change by casey
#&jcode::convert(\$tmp, ‘jis’, ‘sjis’);
&Jcode::convert(\$tmp, ‘jis’, ‘utf8’);
$mbody .= $tmp;
—
# add by casey
&Jcode::convert(\$subject, ‘jis’, ‘utf8’);
# MIMEエンコード
if (-e $mimew) {
require $mimew;
$subject2 = &mimeencode($subject);
—
(スクリプトの文字コードが変わったので)
#————————————————-
# フォームデコード
#————————————————-
(中略)
undef(%in); undef(%err);
@key = (); @need = (); @err = ();
$check = 0; $max_flg = 0;
foreach ( split(/&/, $buf) ) {
my ($key, $val) = split(/=/);
$key =~ tr/+/ /;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“H2”, $1)/eg;
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“H2”, $1)/eg;
#&jcode::convert(\$key, ‘sjis’);
#&jcode::convert(\$val, ‘sjis’);
&Jcode::convert(\$key, ‘utf8’);
&Jcode::convert(\$val, ‘utf8’);
—
(使う場合は変更かな)
#————————————————-
# チェックモード
#————————————————-
sub check {
print “Content-type: text/html\n\n”;
print <<EOM;
<html><head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″>
<title>チェックモード</title></head>
<body>
<h3>チェックモード</h3>
<ul>
EOM
—-
◆参考文献
- フォームメール :
301 Moved Permanently - :: KENT WEB – CGIスクリプト :: :
:: KENT WEB - CGI/Perlフリーソフト ::KENT-WEBでは、CGI/Perlによるプログラムを、主に初心者向けにフリーソフトとして配布しています。毎日数万人が訪れる日本最大のCGI/Perlプログラムの配布サイトです。 - 再配布の規定について :
KENT WEB - 再配布規定 - Perl (CGI)で 文字コードUTF-8への変換を気軽に使うライブラリ さとーC++ぶろぐ/ウェブリブログ :
ウェブリブログ:サービスは終了しました。「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜り... - mime_pls ver.2.02 document :
mime_pls ver.2.02 document - PostMailをsutf8.pl使用で文字コードutf-8 :
KENT-WEB サポートコーナー 過去ログ - postmailの文字化け、utf-8変更 :
KENT-WEB サポートコーナー 過去ログ
コメント
jacode.pl は jcode.pl の後継としてUTF-8が使えるように改造したものです。
jacode.pl
http://text.world.coocan.jp/TSNET/?jacode.pl
修正するコードの量を減らせるのではないかと思います。ぜひお試しください。
ありがとう。同じ所でつまずいてうまく行きました。
お役に立ててよかったです。