e$B7,ED$H$$$$$^$9!#e(B
e$B$k$S$-$A$G$9!#e(B
cgi.rbe$B$Ne(BCGI::TagMakere$B!“e(BCGI::HtmlExtensione$BEy$r;H$C$F$$$k?M$O$$$k$G$7$g$&$+!)e(B
e$B$”$^$j;H$o$l$F$$$J$$$N$G$"$l$P!"e(Bcgi/html.rbe$B$H$+$KJ,N%$7$?$[$&$,$$$$5$$,$7$^$9!#e(Be$B$^$?!"e(BCGI::escapee$B7O$Oe(Bcgi/escape.rbe$B$KJ,N%$7$F!"e(Bcgi.rbe$B$Ge(Brequiree$B$9$l$Pe(B
cgi/escapee$BC1FH$G;HMQ$9$k>l9g$O%3%s%Q%/%H$K$J$j$^$9!#$I$&$G$7$g$&$+!)e(B
e$B;29M$^$G$K!"e(Bcgi.rbe$B$r=q$-49$($?e(B CGIAlt
e$B$H$$$&$N$r:n$C$F$^$9!#e(B
http://cgialt.rubyforge.org/
cgi.rbe$B$r0J2<$N$h$&$KJ,2r$7$F$^$9!#e(B
- cgialt.rb
- cgialt/core.rb
- cgialt/util.rb
- cgialt/cookie.rb
- cgialt/html.rb
e$B$^$?e(B CGI.escapeHTML e$B$de(B CGI.unescape
e$B$r3HD%%i%$%V%i%j$G=q$-D>$7$F$$$^$9!#e(B
http://cgiext.rubyforge.org/
e$B=q$-D>$7$FJ,$+$C$?$3$He(B:
(1) CGI.unescape() e$B$,CY$$$;$$$G!“e(Brequest parameter e$B$de(B cookie
e$B$Ne(B
e$B%G%3!<%I$,CY$$e(B
e$B”*e(B e$B2r7h:ve(B: CGI.unescape()
e$B$r3HD%%i%$%V%i%j$G=q$-D>$9e(B
(2) CGI.escapeHTML() e$B$,CY$$$N$G!“e(BPHPe$B$Ne(B htmlspecialchars()
e$B$HHf$Y$FITMxe(B
e$B”*e(B e$B2r7h:ve(B: CGI.escapeHTML()
e$B$r3HD%%i%$%V%i%j$G=q$-D>$9e(B
(3) CGI::Cookie class e$B$,e(B DelegateClass(Array)
e$B$r;H$C$F$$$k$;$$$G!“e(B
require ‘cgi’ e$B$K$9$4$/;~4V$,$+$+$ke(B (ruby
e$B$N5/F0$h$j;~4V$,$+$+$ke(B)e$B!#e(B
(e$B;~4V$,$+$+$k$N$Oe(B CGI::HtmlExtention
e$B$^$o$j$N$;$$$G$O$J$$e(B)
e$B”*e(B e$B2r7h:ve(B: DelegateClass(Array)
e$B$r;H$o$J$$$h$&$K=q$-49$($ke(B
(4) multipart e$B$N$H$-$K!“%G!<%?%5%$%:$r3NG’$;$:<u?.$7$F$k$N$G!“e(B
e$B6K$a$FBg$-$$%U%!%$%k$rAw?.$5$l$k$H%5!<%P;q8;$r?)$$$D$V$9e(B
e$B”*e(B e$B2r7h:ve(B: e$B<u?.$9$k%G!<%?%5%$%:$N>e8B$r@_Dj$9$ke(B
(5) multipart e$B$N$H$-$K!“e(Bfilename
e$B$N$”$k!&$J$7$K4X78$J$/!“CM$re(B
Tempfile e$B$de(B StringIO e$B$K3JG<$7$F$$$k!#K\Mh$J$ie(B filename
e$B$Ne(B
e$B$”$kCM$N$_e(B Tempfile e$B$r;H$$!”$=$&$G$J$$$J$iIaDL$Ke(B String
e$B$Ge(B
e$B$h$$$O$:e(B
e$B"*e(B e$B2r7h:ve(B:
e$B%$%s%?!<%U%'!<%9$rJQ$($J$$$H$$$1$J$$$N$G!"2r7h$OFq$7$$e(B
(6) CGI#initialize() e$B$NCf$Ge(B ENV[‘QUERY_STRING’] e$B$de(B
ENV[‘HTTP_COOKIE’] e$B$re(B
parse e$B$7$F$$$k$N$G!"e(BFastCGI e$B$N$h$&$Ke(B ENV
e$B$r;H$o$J$$>l9g!"e(B
cgi.rb e$B$r;H$&$N$,:$Fqe(B
(e$B<B:]!“e(Bfcgi.rb e$B$G$Ne(B cgi.rb
e$BBP:v$OHa;4$J%3!<%I$K$J$C$F$$$ke(B)
e$B”*e(B e$B2r7h:ve(B: workaround e$B$H$7$F!“e(B$ENV = ENV
e$B$r$7$F$+$i!“e(B
CGI#initialize() e$B$G$Oe(B ENV e$B$N$+$o$j$Ke(B $ENV
e$B$r;H$&$h$&$KJQ99e(B
(7) mod_ruby e$BBP1~$,$d$C$D$1;E;v$G8zN($,0-$$e(B
e$B”*e(B e$B2r7h:ve(B: e$B:G=i$+$ie(B mod_ruby
e$BBP1~$r9M$($F=q$-D>$9e(B
(8) e$B%F%9%H%9%/%j%W%H$,$^$C$?$/MQ0U$5$l$F$$$J$$e(B
e$B”*e(B e$B2r7h:ve(B: e$BCOF;$K%F%9%H%9%/%j%W%H$r=q$/e(B (CGIAlt
e$B$K$OE:IU:Qe(B)
(1)e$B$He(B(2)e$B$Oe(B pure Ruby
e$B$G$O2r7h$7$K$/$$LdBj$J$N$G!“3HD%%i%$%V%i%j$re(B
e$B;H$&$N$,$$$$$H;W$$$^$9!#$H$$$&$+!”%Q%U%)!<%^%s%9$N$?$a$K4pK\E*$Je(B
e$B4X?t$O3HD%%i%$%V%i%j$GDs6!$7$F$[$7$$$H$3$m$G$9!#e(B
(3)e$B$He(B(4)e$B$He(B(8)e$B$O:#$9$0$K$G$b2r7h$G$-$kLdBj$J$N$G!"BP1~$r8!F$$7$Fe(B
e$B$$$?$@$1$k$H$&$l$7$$$G$9!#e(B
e$B0JA0!"e(B(8) e$B$rDs0F$7$?$H$-$K$^$C$?$/$NL5H?1~$@$C$?$N$G$9$,!"e(B
e$BC/$b6=L#$J$$$N$G$7$g$&$+!#e(B
e$B=q$-D>$7$F;W$C$?$N$O!"e(Bcgi.rbe$B$r=q$-D>$7$?$H$3$m$GNI$/$J$i$J$$$He(B
e$B$$$&$3$H$G$9!#e(B1.9 e$B$r8+?x$($F!"e(Bcgi.rb
e$B$NBeBXJ*$r9-$/8xJg$7$F$Oe(B
e$B$$$+$,$G$7$g$&$+!#e(B
PHP e$B$re(B dis e$B$C$F$k>l9g$8$c$J$$$G$9!#e(B