[#46732] ヒアドキュメント内の変数展開が正常に行われない — ShingoKintaka <kamuycikap@...>

Ruby  :1.8.7 (Ubuntu9.10)

12 messages 2010/01/05
[#46733] Re: ヒアドキュメント内の変数展開が正常に行われない — rubikitch@... 2010/01/06

From: ShingoKintaka <kamuycikap@tulip.ocn.ne.jp>

[#46800] DLモジュールの使い方 — kouichi_someya@...

染谷と申します。

12 messages 2010/01/20
[#47678] プログラム実行時に「[BUG] Segmentation fault」 — 染谷 康一 <kouichi_someya@...> 2010/12/09

染谷と申します。

[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
> 
> 


In This Thread