Shift-jisのページだったのですがリニューアルを機に文字コードを
utf-8に変更してページを作っています。
メールフォーム用のcgiは以前と同じものを使いたいのですがページを
utf-8で作ったために送信すると文字化けしてしまいます。
cgi自体をutf-8で保存しましたが同じ結果でした・・・
確認ページがあるわけでもなく必須の項目が埋まっていれば送信するような
シンプルなものなのですがutf-8で文字化けしないようにするには
どのように変更したらいいのでしょうか?
ソースは以下の通りです。
#!/usr/bin/perl
require "jcode.pl";
require "mimew.pl";
$SENDMAIL = '/usr/sbin/sendmail';
$MAILTO = 'mail@example.com';
$MAILSUBJECT = 'メールフォームより';
$query = $ENV{'QUERY_STRING'};
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$form{$key} = $value;
}
$msg .= "----- 連絡先 -----\n";
~~フォーム処理につき省略~~
if ($bad_input) {
print <<END;
Content-type: text/html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>エラー</title>
</head>
<body>
<center>
<h1>エラー</h1>
<div>必須項目が入力されていません。</div>
</center>
</body>
</html>
END
}else {
$mail_to = mimeencode($MAILTO);
$mail_from = mimeencode($form{'mail'});
$mail_subject = mimeencode($MAILSUBJECT);
$body = jcode::jis($msg);
$head = <<END;
To: $mail_to
From: $mail_from
Subject: $mail_subject
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
END
open (MAIL, "| $SENDMAIL -i -t -f $form{'mail'}")
or die("Error: Can't open pipe for sendmail");
print MAIL $head, $body;
close MAIL;
print <<END;
Content-type: text/html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>送信完了</title>
</head>
<body>
<center>
<h1>送信完了</h1>
<div>下記の内容で送信しました.</div>
<textarea cols="48" rows="24">
$msg
</textarea>
</center>
</body>
</html>
END
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
あまりお役に立てなくて申し訳ありません。
もしかすると、このCGIはご自分で作成したものではないのでしょうか?
今更Jcode.plのテストをしてもしょうがないですね。
調べる時間の節約なら、UTF-8対応のperlのメールフォームフリーCGIをダウンロードして、その中身を見るのが早いかも、ですね。
No.3
- 回答日時:
#1です
ごめんなさい、徹夜で頭がボケてます
http://openlab.ring.gr.jp/Jcode/index-j.html
にjcode.plからの移行方法と、HTML化したマニュアルがありますので
読んでみてください。
文字列のエンコード方法はjcode.plとは違うと思います。
その前に、現環境で$msgにSJIS、EUCを入れてみて文字化けしないか
どうかを確認したほうがいいと思います。
これで正しくJISにエンコードされればjcode.plがUTF-8をサポート
してない、ということになると思いますので。
お返事ありがとうございます。
マニュアルを見てみましたが理解できるまで時間が掛かりそうですが
いろいろテストしてみようと思います。
>その前に、現環境で$msgにSJIS、EUCを入れてみて文字化けしないか
どうかを確認したほうがいいと思います。
知識がないもので方法がわからないのですがどのようにすればいいのでしょうか?
No.2
- 回答日時:
文字化けするのは、送信されたメールでしょうか。
それともウェブページでしょうか。
少し気づいた点としては、
・ UTF8 で保存したスクリプトに日本語が含まれるのであれば
use utf8; とした方がよいでしょう。
・ メールの件名は mimeencode する前に JIS に変換する必要はないので
しょうか。
・ ウェブページの文字コードは meta で指定するだけでなくヘッダでも
Content-type: text/html; Charset=UTF-8
として指定した方がよいでしょう。
これで文字化けがおさまるかどうかは、ちょっと自信ありませんが、
参考までに。
お返事ありがとうございます。
文字化けするのはメールです。
#!/usr/bin/perl
use utf8;
require "jcode.pl";
require "mimew.pl";
としてみたのですがweb(送信内容を表示するtextarea内のみ)も
文字化けしてしまいました。
>メールの件名は mimeencode する前に JIS に変換する必要はないので
しょうか。
あまり知識がないので方法はわからないのですが最終的にjisに変換して
メール送信が無難ですよね・・・
No.1
- 回答日時:
perlは何年も触ってないのですが、確か jcode.plはUnicode(UTF-8)に
対応してないんじゃなかったかな、と。
jcode::jis($msg);
試しに,$msgにSJIS、EUCを入れてみて文字化けしなければそうですね。
perl5ならjcode.pmを使えば確実
http://openlab.ring.gr.jp/Jcode/index-j.html
違う理由ならごめんなさい
お返事ありがとうございます。
Jcode-2.06.zipをダウンロードしてその中のJcode.pmのみをアップして
cgiを以下のように変更しました。
#!/usr/bin/perl
use Jcode;
$SENDMAIL = '/usr/sbin/sendmail';
・・・
$body = Jcode::jis($msg);
・・・
送信するとwebページはInternal Server Errorとなり
メールは送信されない状態です。
参考urlを見てみたのですがよくわからずでとりあえず試してみたのですが
使い方が間違っているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
コーピングについて教えてください
皆さんはストレスを感じたとき、どのような方法や手段、テクニックで対処していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
utf-8でメールを送信すると件名が文字化け
CGI
-
Perl cgiの文字化けを直したい (UTF8)
Perl
-
jcode.pl → jacode.pl
その他(コンピューター・テクノロジー)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについての質問...
-
こんにちは。
-
SUN BBSの改造方法
-
掲示板(kentさんの所のsunbbs...
-
ラジオボタンが両方とも選択で...
-
wordの数式について 定積分を書...
-
チェックボックスの返す値
-
別formのhidden項目を自form値...
-
VB.net データーグリッドビュー...
-
select値をhiddenのvalueに渡し...
-
[HTML]プルダウンメニューの横...
-
WEBページを強制的に横画面で見...
-
postデータのあるページの再表示
-
VB初心者。小数点以下の表示で...
-
ローカルテストサーバーと本番...
-
FORMのselectの選択肢を最初か...
-
OPTIONタグにループは使えない...
-
JavaScriptのwindow.openでリフ...
-
tracert ができない原因
-
チェックボックスでのvalue値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについての質問...
-
WEBアプリケーションからフォル...
-
perlを難読化、暗号化させたい
-
UTF-8で文字化けしないようにす...
-
CGI実行できない。ソースが表示...
-
popular among popularの違いを...
-
CGI.pmのstart_htmlで思い通り...
-
.htaccessでサーバエラー
-
cgiで動画ファイルをアップロー...
-
content-dispositionによるファ...
-
メール送信後のHTMLが文字化け...
-
cgiからsendmailを送信で文字化け
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
掲示板(kentさんの所のsunbbs...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
select値をhiddenのvalueに渡し...
-
INPUT TYPE
おすすめ情報