■
今日はクッキーとクリプトとリンク部分
str.gsub(/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/,"\\1\\2")
の$1を\\1にしなきゃいけないのはググって発見したけど理由は分かりませんでした。
#------------------------------------------------- # クッキー発行 #------------------------------------------------- def set_cookie(nam,eml,url,pwd) t = Time.now + 60*24*60*60 m = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] w = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", w[t.wday], t.day, m[t.month - 1], t.year, t.hour, t.min, t.sec) cook = "#{nam}<>#{eml}<>#{url}<>#{pwd}" cook = cook.gsub(/([^ a-zA-Z0-9_.-]+)/n) do '%' + $1.unpack('H2' * $1.size).join('%').upcase end.tr(' ', '+') print "Set-Cookie: ASKA_BBS=#{cook}; expires=#{gmt}\n"; end #------------------------------------------------- # クッキー取得 #------------------------------------------------- def get_cookie cook = ENV['HTTP_COOKIE'] ck = Hash.new cook.split(/;/).each {|l| (key,val) = l.split(/=/) key.gsub!(/\s/,'') ck[key] = val } ck['ASKA_BBS'] = ck['ASKA_BBS'].tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do [$1.delete('%')].pack('H*') end return ck['ASKA_BBS'].split(/<>/) end #------------------------------------------------- # crypt暗号 #------------------------------------------------- def encrypt(str) salt = [rand(64),rand(64)].pack("C*").tr("\x00-\x3f","A-Za-z0-9./") str.crypt(salt) end #------------------------------------------------- # crypt照合 #------------------------------------------------- def decrypt(inp, pwd) if inp.crypt(pwd) == pwd return 1 else return 0 end end #------------------------------------------------- # 自動リンク #------------------------------------------------- def auto_link(str) str.gsub(/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/,"\\1<a href=\"\\2\" target=\"_blank\">\\2</a>") end
変更
def get_cookie
cook = ENV['HTTP_COOKIE']
cook = ';' unless cook
ck = Hash.new("")
クッキー部分は上記のようにしないと
初めてアクセスしてクッキーが記録されてないとエラーになります。
Perlだとエラーが出ないのにRubyではnilという概念でエラーが出る場面が多いです。
これって不便に感じるんですが何か役に立つのかな?
とりあえず動くようになったのでリンク
http://apollorec.main.jp/aska/aska.cgi
http://apollorec.main.jp/aska/aska.txt
さて、これをRubyらしくしてみせますw
(といってもどうすりゃいいのかわからないので、助言をお願いします。)