昨日の朝から強烈で下痢と嘔吐感。うへー。昨日は医者に行って会社は休み。今日も昼から早退。21世紀に入ってから何かおかしい? 調子が悪いのは身体だけではないんだけど,とにかく体調が悪いのはかなわん。
会社の帰りに時計屋によって,電池交換に出してたのを引き取ってくる。
glibc-2.2.1のパッチは中断。eucJP/SJIS-UCS4変換表に手を入れ,文字集合記述ファイル (Character Set Description File) をそれに合わせると,localedefコマンドがロケール定義ファイルのLC_COLLATEカテゴリでエラーを出す。これはかなり難しい。
日本語EUCやシフトJISとUnicodeとの変換は,システムによって違いが結構ある。この場合,variationを許容して変換する方が望ましい。すなわち,U+2016, U+2225のいずれを受け取っても日本語EUCなら/xa1/xc2に変換すると。この線でなら検討する価値はありそう。
昼から出ようかと思ってたが,やめにして部屋の片づけ。全く本棚が足りん。さて,どうしたもんか。
#
POSTメソッドのリダイレクト
Tag(s):
Ruby
CGI
Ruby Earrings -- eRuby + Ruby CGI [4]
POSTメソッドによるリクエストに対してリダイレクトする(Locationヘッダーを返す)と,user agentがリダイレクト先に同じ内容でPOSTするので,リダイレクト先が信頼できる場合であっても,効率が悪そう。
user agentによってはリダイレクト先にGETメソッドでリクエストしなおすらしいが,それは期待できない,というか誤りとある。RFC 2616 HTTP/1.1 10.3.2 301 Moved Permanently; RFC 1945 HTTP/1.0 9.3 Redirection 3xx
HTTP/1.1なuser agentに対しては303 See Otherを返せばいいらしい。pre-HTTP/1.1なuser agentに対しては302 Foundを返すとGETで取り直してくれるかもしれない。RFC 2616 10.3.4
2000.05.20/cgi CGIで設定できるヘッダー
rubyで書くと,例えばこう;
print "Status: ", (ENV['SERVER_PROTOCOL'] == "HTTP/1.1" ? "303" :
"302"), "\n"
print "Location: #{uri}\n\n"
#
Webでのメールフォーム
Tag(s):
Ruby
CGI
Webデザイン
RubyでWebからメールを送信するスクリプトを書いてみる。例えばとほほのWWW入門などにもあるが,ヘッダに直にiso-2022-jpで書いていたりと,どうも今ひとつ。
本質的な部分は以下で全部。Rubyで書くとコンパクトにまとまる。
71: from = cgi['from'][0].strip
72: if from =~ /([a-zA-Z0-9]+\.)*[a-zA-Z0-9]+@([a-zA-Z0-9]+\.)+[a-zA-Z0-9]+/
73: from_addr = $&
74: else
75: from_addr = "unknown@unknown.unknown"
76: end
77:
78: from_name = cgi['name'][0]
79: body = cgi['body'][0].strip.split(/\r?\n/)
80:
81: open("|" + INJECTOR, "w") do |fp|
82: fp.print <<EOF
83: From: #{from_addr}
84: To: #{MAILTO}
85: Subject: =?ISO-2022-JP?B?#{[e2j(SUBJECT)].pack("m").chomp}?=
86: MIME-Version: 1.0
87: Content-Type: text/plain; charset=ISO-2022-JP
88:
89: #{e2j("メールアドレス: " + from)}
90: #{e2j("お名前: " + from_name)}
91:
92: EOF
93: body.each {|line|
94: fp.print e2j(line), "\n"
95: }
96: end
メールアドレスの検査が怪しいが,あとは容易い。
これを書いてるときに気付いたが,Kconv.kconv()はMIMEデコードをしてまうのね。NKF.nkf()を使うように日記スクリプトを書き換え。
2001.04.07/ruby sendmailの引数