いつもお世話になっております。
Perlでメール送信プログラムを作成しました。
正常には送れるのですが、問題が発生しました。
それが文字化けです。
どうも、下記のコードで
use CGI;
my $body = $q->param('body');
print "Content-type: text/plain; charset=Shift_JIS\n\n";
print "本文が入力されていません。\n\nブラウザの戻るボタンで戻ってください。";
exit(1);
}
$smtp->datasend("本文 : $body\n\n");
一部抜粋なのですが、
まず、パソコンではparamで受け取ったとこが文字化けするみたいで、
スマホでは、全て文字化けしてしまいます。
どう対応すればいいでしょうか?
No.4ベストアンサー
- 回答日時:
No.3です。
> はい、件名で異字体以外は文字化けしていなく
> my $subject = 'ホームページからお問い合わせ';
> from_to($subject, 'shiftjis', 'iso-2022-jp');
これはWebブラウザからメール本文が来た時にサーバ上で動作するメール送信プログラム内の処理で、常に「ホームページからお問い合わせ」とセットされるわけですよね?
その処理では化けないと。
ところがWebブラウザから飛んできたメール本文を同じように処理すると化けると。
ということはプログラム内で(=サーバ内で)生成した文字列の文字コードと、Webブラウザから飛んできたメール本文の文字コードは異なるということを意味します。
かつ「from_to($subject, 'shiftjis', 'iso-2022-jp');」で文字化けしないということはサーバ内はShift_JISでしょう。
ということはWebブラウザから来たメール本文はShift_JIS以外ということになります。
そこが調査の出発点。
で。No.1に書きましたように基本はメール本文をJIS(ISO-2022-JP)に変換し、メールヘッダにもそのように指定して送信するのが標準仕様です。
ん~・・・難しいですね
現在のプログラムで送るメール以外で、普段から送られてくるメール
でのメッセージソースを開くと
エスケープ文字??がメール本文であろうソースのところに
表示されていました。
■→「$B"#」
このようになっていました。
これが正確に■になっているということは
なにかしらの変換ツールで直されている?ということですか・・?
No.3
- 回答日時:
No.1です。
なるほど。
その場合、メール本文を入力するWeb画面からサーバに送信されているメール本文の文字コードは何であることを期待してますか?
Shift_JISですか?
で、実際にShift_JISの文字が来ていますか?
確実にShist_JISで来るようにするにはHTMLのFORMタグの属性accept-charsetでShift_JISを指定するのだったと思います。HTMLタグ辞典(ネット上のHTMLタグ解説ページ等で可)などで確認ください。
それだけでは不足で、送信ボタンのところを単にsubmitするのではなく、OnClickイベントを拾ってJavassriptで、、、
document.charset='Shift_JIS';
みたいなことをしないといけないかもしれません。
FORM変数の文字化けもよくある話しなので、これも「フォーム変数 文字化け」といった適当なキーワードで検索すると解説ページが簡単にみつかると思います。
ちなみに「吉野家」の吉は「士」ではなく「土」ですが、こういった異字体はJISコードに含まれません。(Shift_JISとUTFにはある)
「高」の鍋蓋の下の「口」の上下が飛び出したいわゆる「はしご高」や、「崎」の「大」が「立」(かつ下端の_が可の上線となっているもの)なども同様です。
正確に処理しようとすると、これらの文字をエスケープしてあがないといけません。そういった事柄についても前述のような解説を読む中で出て来るかと思います。
参考まで。
ご回答ありがとうございます。
>その場合、メール本文を入力するWeb画面からサーバに送信されているメール本文の文字コードは何であることを期待してますか?
Shift_JISですか?
はい、件名で異字体以外は文字化けしていなく
my $subject = 'ホームページからお問い合わせ';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);
としているので、同じくShiftjisがいいです・・・
>で、実際にShift_JISの文字が来ていますか?
「あああ」と打つと→「縺ゅ≠」で返ってきます
これはShift_JIS・・・なのかな・・・?
フォーム変数 文字化けについては
http://blog.alan-trigger.info/?p=22
このサイトに書いてあるようなことですか。。?
No.2
- 回答日時:
No1さんの回答が正統的な対応の方法です。
文字コードの問題。そもそもですが、フォームで受け取る=ユーザが入力したデータを信用してはいけません。
文字コードもそうですし、そのまま代入するだけだとコマンドインジェクションなどの攻撃を受けかねませんのでそれなりの対処も施すべきです。
で、それらもちゃんと対応するまでの一時しのぎとして、フォームのページ(htmlファイル)の文字コードをJISにしてみれば、うまく行けばメール文字化けしなくなる「かも」しれません。
No.1
- 回答日時:
インターネットにじかに送出する文字データはShift_JISではなくJISとするのが妥当です。
その場合のcharsetへの指定値はISO-2022-JPです。もちろん日本語が入る部分は全てJIS変換します。
変換はjcode.plでもnkfでも何を使ってもよいです。
そういったお決まりの悩み事はGoogleあたりで「Perl メール 文字化け」といった適当なキーワードで検索すると解説ページがやまほどヒットします。
参考まで。
ご回答ありがとうございます。
Jcodeに関しては試したのですが、
jcode::convert(\$subject,'jis');
上手くいきませんでした。
他の変換ツールも調べては実行してみたのですが
use utf8;
や
use MIME::Base64;
等も試したのですが、まだ使いかたがいまいち理解できていないため
どれも上手くいきません。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Exchangeを使用したメール送信...
-
C#のメール送信時のエラーについて
-
プロキシ経由でjavamailを使っ...
-
VBAでoutlook365が起動しません。
-
例外処理のフローチャートの記...
-
VBでグローバル変数を宣言するには
-
Excel VBAで、ユーザーフォーム...
-
LCD ディスプレイを Raspberry ...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
VBSがコンパイルエラーになりま...
-
モジュールの最大数はいくつな...
-
Cからシェルを起動し返り値をハ...
-
VBAで「メモリが不足しています」
-
perlを使って音(sound.wav)を...
-
グラフのX,Y座標を取得したい
-
Perl モジュールのアンインスト...
-
VBAで旧字体を異字体に一括で変...
-
ベースモジュールって?
-
教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
VBAでsmtp認証をするには?
-
Net::SMTPでメールを送信したい...
-
VBScriptで、メールの送信をし...
-
CDO.Messageを使ったVBScript
-
Perl メール 文字化け
-
さくらインターネットでの添付...
-
Enterキーを押しても送信しない...
-
メーリングリストへ登録するCGI
-
perl 自動返信メールプログラム...
-
空メールシステムについて
-
C#のメール送信時のエラーについて
-
ウィンドウズ上で動くメールサ...
-
LotusScript メール作成方法が...
-
リンクをクリックするだけでC...
-
javamailでメール送信ができません
-
添付ファイルをつけてメールを送る
-
server errorで困ってます。
-
フォームメールを外人に送る方...
-
自作CGI(メールフォーム)の...
おすすめ情報