Ruby
お遊びプログラム1
eruby版 簡単チャット
<% ERuby.charset = "UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>チャットルーム</title> </head> <body> <form action="chat.rhtml" methond="post"> お名前: <input type="text" name="name" size="10"> コメント: <input type="text" name="msg" size="40"> <input type="submit" name="comment" value="発言/更新"> </form> <hr> <% require 'cgi' logname = "log.cgi" # ログファイル名 cgi = CGI.new loga = [] log = "" name = cgi.params['name'][0] name = "" if name == nil name = name.slice(0,10) msg = cgi.params['msg'][0] msg = "" if msg == nil msg = msg.slice(0,40) if name != "" && msg != "" then line = CGI::escapeHTML("<#{name}>:#{msg}") + "<br>\n" end unless File::exist?(logname) then open(logname, "w"){} end open(logname, "r"){|logf| loga = logf.readlines } open(logname, "w"){|logf| loga.unshift(line) log = loga[0...10].join logf.write(log) } print log %> </body> </html>
- ログファイル名を適当に設定
- ログファイルのロック処理すらしていないので単なるお遊びです
お遊びプログラム2
#!/usr/local/bin/ruby $KCODE = "e" require 'cgi' cgi_name = ENV['SCRIPT_NAME'] form = <<EOT <form action="#{cgi_name}" method="POST"> <textarea name="data" rows="10" cols="70"></textarea><br> <input type="hidden" name="mode" value="encode"> <input type="submit" value="変換!"><br> </form> EOT my_url = "<a href=\"#{cgi_name}\">もう一回</a>" cgi = CGI.new("html3") mode = cgi.params["mode"][0] data = "" if mode == "encode" then result = "" if cgi.params["data"][0] =~ %r!(\w*://)(.*)! then result = $1 data = $2 else data = cgi.params["data"][0] end i = 0 str = "" while i < data.length do if data[i].chr=="/" || data[i].chr=="=" || data[i].chr=="&" || data[i].chr=="?" then str = data[i].chr i += 1 elsif data[i...i+3] =~ /%\d\d/ str = data[i...i+3] i += 3 else str = "%" + sprintf("%2X", data[i]) i += 1 end result += str end end cgi.out("text/html; charset=EUC-JP"){ cgi.html(){ cgi.head{ cgi.title{"encode"} } + cgi.body(){ if mode == "encode" then result + "<br>\n" + my_url else form end } } }
変換元のURLに"/" "=" "&" "?" や、URLエンコードされた /%\d\d/ が含まれていた場合再エンコードしないようにしているが、CGIの変数名等もURLエンコードしてしまうのでうまくいかないのもあります。 あくまでお遊び:-)
たとえば Yahoo! JAPAN[外部]は http://%77%77%77%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/[外部] でも行けます。
Keyword(s):
References:[FrontPage] [テキスト整形ルール]