[ruby-list:46739] Re: ヒアドキュメント内の変数展開が正常に行われない
From:
ShingoKintaka <kamuycikap@...>
Date:
2010-01-06 04:32:43 UTC
List:
ruby-list #46739
るびきちさん、書き込みありがとうございます。
プログラムを記入します。
下記のcgiをhtmlファイルに記述されているformのactionで呼び出しております。
--ここから
#!/usr/local/bin/ruby -Ku
#=問合せフォームによるメール配信
#
# Authors:: Shingo Kintaka
# Version:: 1.0 2010-01-02 S.Kintaka
# Copyright:: Copyright (C) S.Kintaka , 2006. All rights reserved.
# 問合せフォームの値を取得し、メール本文に情報を記述して送信する。
#==開発履歴
# K20100102_00 新規開発
require "cgi" # CGIクラス
require 'kconv' # 漢字コード変換用
require "net/smtp" #
FROM_ADDR = "InquiryForm@foo-bar.jp"
TO_ADDR = "myaddress@foo.bar.jp"
SUBJECT = "御客様からの問合せ"
INJECTOR = "/usr/sbin/sendmail -i -t"
#
#= お問い合わせフォームからパラメータを取得しメールで送信する
#
class InquiryMail
# アクセサメソッド
attr_accessor :InquiryCommodity # お問い合わせ商品
attr_accessor :ContentOfInquiry # お問い合わせ内容
attr_accessor :NameKana # お名前(カナ)
attr_accessor :NameKanji # お名前(漢字)
attr_accessor :TelephoneNumber # 電話番号
attr_accessor :EmailAddress # E-Mailアドレス
attr_accessor :ZipCode # 郵便番号
attr_accessor :AdministrativeDivisions # 都道府県
attr_accessor :LocalAuthorityCounty # 市町村郡
attr_accessor :HouseNumber # 番地
#
# initialize
#
def initialize
print "Content-type: text/html\n\n"
@cgi_form = CGI.new
end
#
# フォーム情報を取得する
#
def GetForm
@InquiryCommodity = @cgi_form["InquiryCommodity"]
# お問い合わせ商品
@ContentOfInquiry = @cgi_form["ContentOfInquiry"]
# お問い合わせ内容
@NameKana = @cgi_form["NameKana"]
# お名前(カナ)
@NameKanji = @cgi_form["NameKanji"]
# お名前(漢字)
@TelephoneNumber = @cgi_form["TelephoneNumber"]
# 電話番号
@EmailAddress = @cgi_form["EmailAddress"]
# E-Mailアドレス
@ZipCode = @cgi_form["ZipCode"]
# 郵便番号
@AdministrativeDivisions = @cgi_form["AdministrativeDivisions"]
# 都道府県
@LocalAuthorityCounty = @cgi_form["LocalAuthorityCounty"]
# 市町村郡
@HouseNumber = @cgi_form["HouseNumber"]
# 番地
end
#
# 入力データのチェック
#
def DataCheck
# print @InquiryCommodity , "<br>"
# print @ContentOfInquiry , "<br>"
# print @NameKana , "<br>"
# print @NameKanji , "<br>"
# print @TelephoneNumber , "<br>"
# print @EmailAddress , "<br>"
# print @ZipCode , "<br>"
# print @AdministrativeDivisions , "<br>"
# print @LocalAuthorityCounty , "<br>"
# print @HouseNumber , "<br>"
# 必須項目をチェックして正しければtrueを返し、間違って入ればfalseを
返す。
end
#
# メール配信
#
def SendMail
header = <<EOF
From: #{FROM_ADDR}
To: #{TO_ADDR}
Subject: #{SUBJECT}
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
EOF
pipe = IO.popen(INJECTOR, "w")
pipe.print Kconv.tojis(header), "\n\n"
pipe.print Kconv.tojis("○御客様問合せ商品\n")
pipe.print Kconv.tojis(@InquiryCommodity), "\n\n"
pipe.print Kconv.tojis("○お客様問合せ内容\n")
pipe.print Kconv.tojis(@ContentOfInquiry), "\n\n"
pipe.print Kconv.tojis("○お名前(カナ)\n")
pipe.print Kconv.tojis(@NameKana), "\n\n"
pipe.print Kconv.tojis("○お名前(漢字)\n")
pipe.print Kconv.tojis(@NameKanji), "\n\n"
pipe.print Kconv.tojis("○電話番号"),"\n"
pipe.print Kconv.tojis(@TelephoneNumber), "\n\n"
pipe.print Kconv.tojis("○メールアドレス"),"\n"
pipe.print Kconv.tojis(@EmailAddress), "\n\n"
pipe.print Kconv.tojis("○郵便番号"),"\n"
pipe.print Kconv.tojis(@ZipCode), "\n\n"
pipe.print Kconv.tojis("○都道府県名\n")
pipe.print Kconv.tojis(@AdministrativeDivisions), "\n\n"
pipe.print Kconv.tojis("○市町村郡\n")
pipe.print Kconv.tojis(@LocalAuthorityCounty), "\n\n"
pipe.print Kconv.tojis("○番地\n")
pipe.print Kconv.tojis(@HouseNumber)
pipe.close
end
#
# メール送信後メッセージ表示
#
def TransmissionEndMessage
name_kanji = @NameKanji.toeuc
message =<<-"EOF"
<html>
<head>
<meta http-equiv="Content-type" content="text/html;
charset=euc-jp">
<title>お問合せフォーム</title>
</head>
<body>
#{name_kanji}様<br>
御問い合わせありがとうございました。<br>
<br>
内容を確認後、#{name_kanji}様宛のメール#{@EmailAddress}に返信
させて頂きます。<br>
※返信は2〜6営業日以内とさせて頂きます。<br>
<br>
<a href="http://www.google.jp/">TOPページに戻る</a>
</body>
</html>
EOF
print message.toeuc
end
#
# エラー処理
#
def error_cgi
print "*** CGI Error List ***<br>"
print "#{CGI.escapeHTML($!.inspect)}<br>"
$@.each { |x|
print CGI.escapeHTML(x), "<br>"
}
end
end
#
# MainProgram
#
if __FILE__ == $0
begin
inqmail = InquiryMail.new
inqmail.GetForm
inqmail.DataCheck
inqmail.SendMail
inqmail.TransmissionEndMessage
rescue
inqmail.error_cgi
end
end
--ここまで
ubikitch@ruby-lang.org さんは書きました:
> From: ShingoKintaka <kamuycikap@tulip.ocn.ne.jp>
> Subject: [ruby-list:46732] ヒアドキュメント内の変数展開が正常に行われない
> Date: Wed, 6 Jan 2010 08:58:20 +0900
>
> るびきちです。
>
>> RubyでCGI(問合せフォーム)を作成しています。
>> メソッド「TransmissionEndMessage」で利用している@NameKanjiと
>> @EmailAddressの展開が正しく行われません。
>> @EmailAddressにはアルファベットの文字列が入っているので展開されるんです
>> が、@NameKanjiは正しく展開されません。
>> ひらがな、漢字の文字列を入れると何も表示されず、上記<結果>のようにブラ
>> ウザに表示されます。
>> 表示したいページの文字コードはeuc-jpなのですが、文字コードの問題なので
>> しょうか?
>> 理由と原因が分からず困っています。
>
> コードの一部ではなくて再現するための実行可能なコードを見せてください。
>
> --
> rubikitch
> Blog: http://d.hatena.ne.jp/rubikitch/
> Site: http://www.rubyist.net/~rubikitch/
> Twit: http://twitter.com/rubikitch/
> 『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook
>
>