FrontPage  Index  Search  Changes  PageRank  RSS  Login

ibis's Wiki - Ruby Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!!お遊びプログラム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
[[URLを全部エンコードしてみるCGI|http://ibis.pajya.net/cgi/encode.cgi]]
<<<
#!/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://www.yahoo.co.jp/]]は
http://%77%77%77%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/ でも行けます。
----