フォームメールの確認画面の文字をなおすには?

[上に] [前に] [次に]
まさや [E-Mail] 1999/11/12(金) 15:38:28
メールフォームのCGIで、確認に表示させるHTMLの文字コードが
おかしいままなのですが、なにが原因でしょうか?
受け取ったメールはちゃんと読める文字になっています。

Perlのverは4です。
見本は下のところにあります。
メールフォーム
http://www2u.biglobe.ne.jp/~kotonoha/osouzai/mail.htm
CGI
http://www2u.biglobe.ne.jp/~kotonoha/osouzai/cgi-bin/mail.cgi
cgi-lib.plとjcode.pl
http://www2u.biglobe.ne.jp/~kotonoha/cgi-bin/
よろしくお願いします。

まさや [E-Mail] 1999/11/12(金) 15:41:57
すみません。これじゃCGIの中身が見れないですね。
http://www2u.biglobe.ne.jp/~kotonoha/osouzai/cgi-bin/mail.txt
がCGIの全文です。

ん〜 1999/11/12(金) 15:46:13
登録のフォームのページがSHIFT-jisになっているとか?
確認表示させるページのキャラセットをJISにしてみてはいかがですか?

ふじ 1999/11/12(金) 15:55:21
スクリプト自体の文字コードが Shift-JIS で、
フォームから持ってきた値を JIS にしてあるので、
混在させたら化けますね。

># HTMLに反映する
の前に、SJIS に変換する必要があります。

あと、このスクリプトだと Subject に生JIS が入りますが、
これはあまり良くないです。MIMEエンコードしましょう。

mime plus( http://www.cc.rim.or.jp/~ikuta/mime_pls/ )
を使ってエンコードして、メールのヘッダに

Mime-Version: 1.0

を追加するとよろしいかと。

まさや [E-Mail] 1999/11/12(金) 16:05:45
>の前に、SJIS に変換する必要があります。
どうやったらSJIS変換になるのですか?
手持ちの本にはJIS変換しか載ってないみたいなんですが・・・
すみませんが教えてください。

ん〜 1999/11/12(金) 16:09:59
# 文字コードを変換する
&jcode'convert(*subject, "jis");
&jcode'convert(*message, "jis");
&jcode'convert(*name, "jis");

上記のjisを表示用の部分でsjisにするだけで大丈夫だと思います。

まさや [E-Mail] 1999/11/12(金) 16:41:34
今すぐ試したいのに、こんな時に限ってサーバの緊急メンテ(-_-;

ん〜様とふじ様のお話を総合すると、
メール送信前に
# 文字コードを変換する
&mimeencode'convert(*subject);
&jcode'convert(*name, "jis");
&jcode'convert(*message, "jis");
HTML書き出し前に
# HTML用に文字コードを変換しなおす
&jcode'convert(*name, "sjis");
&jcode'convert(*message, "sjis");
ってことですよね?
サーバが治ったら再チャレンジしてきます。

ふじ 1999/11/12(金) 16:59:48
>&mimeencode'convert(*subject);
$encoded_subject = &mimeencode($subject);
として、ヘッダには $encoded_subject を埋めこみます。

Subject以外にも日本語文字が入る可能性があるなら、
メールのヘッダを丸ごとエンコードしましょう。
#とほほさんの wwwmail はそうしてますね。

まさや [E-Mail] 1999/11/12(金) 18:50:53
とりあえず文字コードの問題は解決しました。
ん〜様、ふじ様、どうもありがとうございました。

しかしマニュアル通りに書いた
# HTML用に改行しなおす
$message = ~ s/[\r\n, \n]/<BR>/g;
というのを入れるとなんだか変な数字の羅列になります。
そのまま放っておくとだらだら文章が続いてしまうので、
なんとか入力通りに<BR>を入れたいんですが・・・
よい方法があれば教えてください。

\n 1999/11/12(金) 23:17:00
方法
1) s/\r\n|\r|\n/<BR>/g;
2)s/\r\n/<BR>/g;
 s/\r/<BR>/g;
 s/\n/<BR>/g;
どちらも結果は同じですが、2)の用に3回に別けたほうが処理が
早いそうです。
#数百バイト程度ならほとんど変わらないでしょう

まさや [E-Mail] 1999/11/12(金) 23:58:04
教えていただいた方法を試してみたのですが、
やっぱりヘンな数字になってしまいます(T_T)
サンプル、最初とまったく同じとこにあります
ので、すみませんが見てやってください。

ふじ 1999/11/13(土) 00:42:47
>$message = s/\r\n|\r|\n/<BR>/g;
$message =~ s/\r\n|\r|\n/<BR>/g;
ですね。

まさや [E-Mail] 1999/11/13(土) 20:26:48
[[解決]]
できました!
始めたばかりのCGIで、アクセスログ、ログチェックに続いて手をつけた
のがフォームメールでして、これだけで3日くらいかかってるんですが、
動くと嬉しいものですねぇ。

ん〜様、\n様、ふじ様、あらためましてどうもありがとうございました。

[上に] [前に] [次に]