Feature #542: cgi.rb : CGI::unescape return encoding http://redmine.ruby-lang.org/issues/show/542 $B5/I<<T(B: Takeyuki Fujioka $B%9%F!<%?%9(B: Open, $BM%@hEY(B: Normal CGI::unescape$B$O8=:_$O0z?t$N(Bencoding$B$G(Bforce_encoding$B$9$k$h$&$K(B $B$J$C$F$$$^$9$,!"(Bascii_only?$B$,(Btrue$B$N>l9g$O(BUS-ASCII$B!"(B false$B$N>l9g$O(BASCII-8BIT$B$rJV$9$N$,$$$$$H;W$$$^$9!#(B Index: lib/cgi.rb =================================================================== --- lib/cgi.rb ($B%j%S%8%g%s(B 19071) +++ lib/cgi.rb ($B:n6H%3%T!<(B) @@ -349,10 +349,10 @@ # string = CGI::unescape("%27Stop%21%27+said+Fred") # # => "'Stop!' said Fred" def CGI::unescape(string) - enc = string.encoding - string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do - [$1.delete('%')].pack('H*').force_encoding(enc) + str=string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do + [$1.delete('%')].pack('H*') end + str.ascii_only? ? str.force_encoding("US-ASCII") : str.force_encoding("ASCII-8BIT") end TABLE_FOR_ESCAPE_HTML__ = {
on 03.09.2008 14:35
on 03.09.2008 16:56
$B%A%1%C%H(B #542 $B$,99?7$5$l$^$7$?!#(B (by Takeyuki Fujioka)
$B$3$N=$@5$N%F%9%H$rDI2C(B
Index: test/cgi/test_cgi_class_method.rb
===================================================================
--- test/cgi/test_cgi_class_method.rb ($B%j%S%8%g%s(B 0)
+++ test/cgi/test_cgi_class_method.rb ($B%j%S%8%g%s(B 0)
@@ -0,0 +1,21 @@
+require 'test/unit'
+require 'cgi'
+
+
+class CGIClassMethodTest < Test::Unit::TestCase
+ def test_cgi_class_method_escape
+ assert_equal(CGI::unescape("Hello"),"Hello")
+
assert_equal(CGI::unescape("Hello%21%22%25%26%27%28%29-%3D%5E%7E%7C"),
+ "Hello!\"#$\%&'()-=^~|")
+
unescaped=CGI::unescape("%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF")
+
assert_equal(unescaped,"\xE3\x81\x93\xE3\x82\x93\xE3\x81\xAB\xE3\x81\xA1\xE3\x81\xAF")
+ if RUBY_VERSION>="1.9.0"
+ assert_equal(CGI::unescape("Hello").encoding,Encoding::US_ASCII)
+
assert_equal(CGI::unescape("Hello%21%22%25%26%27%28%29-%3D%5E%7E%7C").encoding,
+ Encoding::US_ASCII)
+ assert_equal(unescaped.encoding,Encoding::ASCII_8BIT)
+ end
+ end
+end
+
+
----------------------------------------
http://redmine.ruby-lang.org/issues/show/542
on 03.09.2008 20:59
In article <48be847681f43_55585b236f8341@redmine.ruby-lang.org>, Takeyuki Fujioka <redmine@ruby-lang.org> writes: > CGI::unescape$B$O8=:_$O0z?t$N(Bencoding$B$G(Bforce_encoding$B$9$k$h$&$K(B > $B$J$C$F$$$^$9$,!"(Bascii_only?$B$,(Btrue$B$N>l9g$O(BUS-ASCII$B!"(B > false$B$N>l9g$O(BASCII-8BIT$B$rJV$9$N$,$$$$$H;W$$$^$9!#(B $B0z?t$K$b$H$b$HHs(BASCII$BJ8;z$,F~$C$F$$$?>l9g$K$O$I$&$J$j$^$9$+$M!#(B
on 03.09.2008 23:22
$BF#2,$G$9!#(B >> CGI::unescape$B$O8=:_$O0z?t$N(Bencoding$B$G(Bforce_encoding$B$9$k$h$&$K(B >> $B$J$C$F$$$^$9$,!"(Bascii_only?$B$,(Btrue$B$N>l9g$O(BUS-ASCII$B!"(B >> false$B$N>l9g$O(BASCII-8BIT$B$rJV$9$N$,$$$$$H;W$$$^$9!#(B > > $B0z?t$K$b$H$b$HHs(BASCII$BJ8;z$,F~$C$F$$$?>l9g$K$O$I$&$J$j$^$9$+$M!#(B $B$=$NItJ,$O2?$bJQ49$5$l$^$;$s!#(B $B%(%s%3!<%G%#%s%0$O(BASCII-8BIT$B$K$J$j$^$9!#(B
on 04.09.2008 01:32
$B@.@%$G$9!#(B Takeyuki Fujioka wrote: > CGI::unescape$B$O8=:_$O0z?t$N(Bencoding$B$G(Bforce_encoding$B$9$k$h$&$K(B > $B$J$C$F$$$^$9$,!"(Bascii_only?$B$,(Btrue$B$N>l9g$O(BUS-ASCII$B!"(B > false$B$N>l9g$O(BASCII-8BIT$B$rJV$9$N$,$$$$$H;W$$$^$9!#(B ascii_only? $B$J$H$-$K(B US-ASCII $B$rJV$9$N$O$$$$$H;W$&$N$G$9$,!"(B false $B$J$H$-$K(B ASCII-8BIT $B$O$^$:$$$G$9$M!#(B HTTP $B%X%C%@$G(B charset $B$r;XDj$5$l$D$D(B escape $B$5$l$FEO$5$l$?>l9g!"(B $B$H$j$"$($:(B escape $B$5$l$?J8;zNs$K$=$N(B charset $B$r$D$1!"(B $B$=$N8e$K(B unescape $B$9$k$C$F$N$O$=$l$J$j$K$"$j$&$kN.$l$J$N$G!#(B Ruby M17N $B$G$O!"0lO"$N=hM}$N7k2L$N(B encoding $B$r;XDj$9$k:]$K!"(B $B0z?t$N(B String#encodig $B$rMQ$$$k$H$$$&$3$H$O$7$P$7$P9T$o$l$^$9!#(B
on 04.09.2008 02:46
$BF#2,$G$9!#(B Fujioka wrote: > $B%/%(%j$rEO$5$l$?>l9g$O$=$N%/%(%j$K(Bencoding$B$r$D$1$F(B unescape$B$9$k$N$G$O$J$/$F!"(Bunescape$B$r$7$F$+$i(B encoding$B$r$D$1$k$N$,=gHV$H$7$F$O@5$7$$$H;W$$$^$9!#(B $B%/%(%j$ODL>o$O(Bascii$BJ8;zNs$N$O$:$J$N$G!"(B $B$=$l$K(Bencoding$B$r$D$1$kJ}$,4V0c$C$F$$$k$H;W$$$^$9!#(B $B$?$@!":#;W$C$F$$$k$N$O(BASCII$B0J30$O(BASCII-8BIT$B$K$J$k$N$O(B $B$"$s$^$j$@$H;W$C$F$$$F!"(BCGI.new$B$7$?$H$-$K%*%W%7%g%s$G(B $B4|BT$9$k(Bencoding$B$rEO$7$F$"$2$l$P(B $B<+F0E*$K(BUS-ASCII$B$+$=$l0J30$N>l9g$O$=$N(Bencoding$B$K(Bforce_encoding$B$7$F(B $B$"$2$k5!G=$,M_$7$$$H;W$C$F$$$^$9!#(B $B$^$@93AhCf$G$9$,!#(B > Ruby M17N $B$G$O!"0lO"$N=hM}$N7k2L$N(B encoding $B$r;XDj$9$k:]$K!"(B > $B0z?t$N(B String#encodig $B$rMQ$$$k$H$$$&$3$H$O$7$P$7$P9T$o$l$^$9!#(B > unescape$B$O(Bascii$B$+$i(Bascii$B$+$I$&$+$o$+$i$J$$J8;zNs$X$N%U%#%k%?$J$N$G(B $B0z?t$N(Bencoding$B$O$"$F$K$G$-$J$$$H;W$C$F$$$^$9!#(B
on 04.09.2008 03:05
In article <48BEFFF0.4090403@rabbix.jp>, Fujioka <fuj@rabbix.jp> writes: > $B$=$NItJ,$O2?$bJQ49$5$l$^$;$s!#(B > $B%(%s%3!<%G%#%s%0$O(BASCII-8BIT$B$K$J$j$^$9!#(B [ruby-dev:36138] $B$N<BAu$O(B ($B0z?t$,(B ASCII-8BIT $B0J30$GHs(BASCII$BJ8(B $B;z$,F~$C$F$$$l$P(B) $BNc30$K$J$j$=$&$G$9$,!"$=$s$J$3$H$O$"$j$^$;(B $B$s$+(B?
on 04.09.2008 05:03
$BF#2,$G$9!#(B >> $B$=$NItJ,$O2?$bJQ49$5$l$^$;$s!#(B >> $B%(%s%3!<%G%#%s%0$O(BASCII-8BIT$B$K$J$j$^$9!#(B > > [ruby-dev:36138] $B$N<BAu$O(B ($B0z?t$,(B ASCII-8BIT $B0J30$GHs(BASCII$BJ8(B > $B;z$,F~$C$F$$$l$P(B) $BNc30$K$J$j$=$&$G$9$,!"$=$s$J$3$H$O$"$j$^$;(B > $B$s$+(B? $B$D$^$j(Bencoding$B$,4V0c$C$F$$$k>l9g$H$$$&$3$H$G$9$+!)(B $B$=$N>l9g$ONc30$G$b$$$$$h$&$J!#!#!#(B ASCII-8BIT$B$KJQ49$7$F$+$i=hM}$7$FNc30$r=P$5$J$$J}$,$$$$$G$7$g$&$+!)(B
on 05.09.2008 07:22
$BF#2,$G$9!#(B > $B$?$@!":#;W$C$F$$$k$N$O(BASCII$B0J30$O(BASCII-8BIT$B$K$J$k$N$O(B > $B$"$s$^$j$@$H;W$C$F$$$F!"(BCGI.new$B$7$?$H$-$K%*%W%7%g%s$G(B > $B4|BT$9$k(Bencoding$B$rEO$7$F$"$2$l$P(B > $B<+F0E*$K(BUS-ASCII$B$+$=$l0J30$N>l9g$O$=$N(Bencoding$B$K(Bforce_encoding$B$7$F(B > $B$"$2$k5!G=$,M_$7$$$H;W$C$F$$$^$9!#(B > $B$^$@93AhCf$G$9$,!#(B > $B$3$l$K$D$$$F$G$9$,!"(B $B@.@%$5$s$H$d$j<h$j$r$7$?7k2L!"$d$O$j%X%C%@$N(Bcharset$B$r8+$F(B $B$=$N(Bencoding$B$r$D$1$F$"$2$k$N$,6Z$@$m$&$H$$$&OC$K$J$j$^$7$?!#(B
on 09.09.2008 05:48
In article <48BF4FF3.3030606@rabbix.jp>,
Fujioka <fuj@rabbix.jp> writes:
> $B$D$^$j(Bencoding$B$,4V0c$C$F$$$k>l9g$H$$$&$3$H$G$9$+!)(B
$B$$$(!#(Bencoding $B$H$7$F4V0c$C$F$$$J$/$F$b!#(B
on 09.09.2008 11:59
$B%A%1%C%H(B #542 $B$,99?7$5$l$^$7$?!#(B (by Takeyuki Fujioka) $B%9%F!<%?%9(B Open$B$+$i(BRejected$B$KJQ99(B $B$$$:$l(Bencoding$B$N<+F0IUM?5!G=$rEk:\$9$k$H$$$&$3$H$G!"(B $B$3$N%A%1%C%H$OJD$8$^$9!#(B ---------------------------------------- http://redmine.ruby-lang.org/issues/show/542
on 10.09.2008 07:01
In article <48C0C20E.4000307@rabbix.jp>, Fujioka <fuj@rabbix.jp> writes: > $B@.@%$5$s$H$d$j<h$j$r$7$?7k2L!"$d$O$j%X%C%@$N(Bcharset$B$r8+$F(B > $B$=$N(Bencoding$B$r$D$1$F$"$2$k$N$,6Z$@$m$&$H$$$&OC$K$J$j$^$7$?!#(B $B%V%i%&%6$O$3$3$GMxMQ$G$-$k(B charset $B$r$D$1$F$/$l$k$s$G$7$g$&(B $B$+(B?
on 10.09.2008 07:52
On Wed, 10 Sep 2008 13:51:26 +0900 In article <87ej3stx68.fsf@fsij.org> [[ruby-dev:36239] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Tanaka Akira <akr@fsij.org> wrote: > In article <48C0C20E.4000307@rabbix.jp>, > Fujioka <fuj@rabbix.jp> writes: > > > $B@.@%$5$s$H$d$j<h$j$r$7$?7k2L!"$d$O$j%X%C%@$N(Bcharset$B$r8+$F(B > > $B$=$N(Bencoding$B$r$D$1$F$"$2$k$N$,6Z$@$m$&$H$$$&OC$K$J$j$^$7$?!#(B > > $B%V%i%&%6$O$3$3$GMxMQ$G$-$k(B charset $B$r$D$1$F$/$l$k$s$G$7$g$&(B > $B$+(B? application/x-www-form-urlencoded $B$K$O$=$b$=$b(B charset $B$,$"$j$^$;$s$7!"(B multipart/form-data $B$K$b(B charset $B$,IU$$$F$$$k$N$O8+$?$3$H$,$J$$$G$9!#(B
on 10.09.2008 08:10
$BF#2,$G$9!#(B >> $B@.@%$5$s$H$d$j<h$j$r$7$?7k2L!"$d$O$j%X%C%@$N(Bcharset$B$r8+$F(B >> $B$=$N(Bencoding$B$r$D$1$F$"$2$k$N$,6Z$@$m$&$H$$$&OC$K$J$j$^$7$?!#(B > > $B%V%i%&%6$O$3$3$GMxMQ$G$-$k(B charset $B$r$D$1$F$/$l$k$s$G$7$g$&(B > $B$+(B? $B$$$(!"$D$1$F$/$l$^$;$s!#(B $B$"$/$^$G(BCGI$B%"%W%jB&$,4|BT$9$k$3$H$K$J$j$^$9!#(B $B$G$b!"Nc$($P(BUTF-8$B$r4|BT$7$F$$$k%"%W%j$K(BEUC-JP$B$r%]%9%H$7$F(B $BNc30$,5/$-$k$N$O9%$^$7$/$"$j$^$;$s$M!#9M$($^$9!#(B
on 10.09.2008 08:17
On Wed, 10 Sep 2008 14:33:34 +0900 In article <48C75DB4.5010908@rabbix.jp> [[ruby-dev:36241] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Fujioka <fuj@rabbix.jp> wrote: > $B$G$b!"Nc$($P(BUTF-8$B$r4|BT$7$F$$$k%"%W%j$K(BEUC-JP$B$r%]%9%H$7$F(B > $BNc30$,5/$-$k$N$O9%$^$7$/$"$j$^$;$s$M!#9M$($^$9!#(B $B4|BT$7$F$$$k$N$H0c$&J8;z%;%C%H!"$"$k$$$O2u$l$?J8;zNs$rEO$7!"(BXSS$B$r5/$3$9(B $B$H$$$&967b$,$"$k$N$G!"$`$7$mNc30$NJ}$,$"$j$,$?$$$+$b$7$l$^$;$s!#(B begin cgi = CGI.new(:assume_encoding => 'UTF-8') rescue CGI::InvalidEncodingError print "Status: 400 Bad Request\n\n" exit end
on 10.09.2008 09:48
$BF#2,$G$9!#(B >>> $B@.@%$5$s$H$d$j<h$j$r$7$?7k2L!"$d$O$j%X%C%@$N(Bcharset$B$r8+$F(B >>> $B$=$N(Bencoding$B$r$D$1$F$"$2$k$N$,6Z$@$m$&$H$$$&OC$K$J$j$^$7$?!#(B >> $B%V%i%&%6$O$3$3$GMxMQ$G$-$k(B charset $B$r$D$1$F$/$l$k$s$G$7$g$&(B >> $B$+(B? > > application/x-www-form-urlencoded $B$K$O$=$b$=$b(B charset $B$,$"$j$^$;$s$7!"(B > multipart/form-data $B$K$b(B charset $B$,IU$$$F$$$k$N$O8+$?$3$H$,$J$$$G$9!#(B > encoding$B>pJs$O$b$i$($J$$$N$G!"4|BT$9$k$7$+$J$$$G$9!#(B $B$@$+$i$H$$$C$F(BASCII-8BIT$B$+(BUS-ASCII$B$N$I$A$i$G$7$+(B $B%G!<%?$rLc$($J$$$H$$$&$N$bLLE]$+$J$H;W$&$N$G$9$,!"(B $B$I$&$7$?$i$$$$$H;W$$$^$9$+!)(B $B%]%9%H$5$l$?%G!<%?$O(B 1.ASCII-8BIT $B$G$b$i$&!J8=>u!K(B 2.US-ASCII or ASCII-8BIT $B$G$b$i$&(B 3.$B4|BT$9$k(Bencoding$B$r7h$a$F!"(BUS-ASCII or $B4|BT$9$k(Bencoding$B$G$b$i$&(B 4.$B>e5-(B3$B$K2C$($F!"(Bencoding$B%A%'%C%/$r$*$3$J$C$F!"(Bencoding$B$,4V0c$C$F$$$k(B $B>l9g$O(Bnil$B$J$I$rJV$9(B 1$B$H(B2$B$OF|K\8l$N(BCGI$B%"%W%j$N=PNO$,LLE]$G$9!#(B @cgi=CGI.new $B$7$?$H$7$F!"%]%9%H$5$l$?%G!<%?$KF|K\8l$,F~$C$F$/$k$H(B "$B%?%$%H%k(B:#{@cgi['title']}" $B$3$l$,Nc30$G$9!#(B $BF|K\8lJ8;zNs$H(BASCII-8BIT$B$,O"7k$G$-$J$$$?$a$G$9!#(B $B$3$l$G$O;H$$$E$i$$$J$!$H;W$C$F%"%$%G%#%"$rLO:w$7$F$$$k:GCf$G$9!#(B
on 10.09.2008 20:39
In article <48C76705.5000202@rabbix.jp>, Fujioka <fuj@rabbix.jp> writes: > encoding$B>pJs$O$b$i$($J$$$N$G!"4|BT$9$k$7$+$J$$$G$9!#(B > $B$@$+$i$H$$$C$F(BASCII-8BIT$B$+(BUS-ASCII$B$N$I$A$i$G$7$+(B > $B%G!<%?$rLc$($J$$$H$$$&$N$bLLE]$+$J$H;W$&$N$G$9$,!"(B > $B$I$&$7$?$i$$$$$H;W$$$^$9$+!)(B $B%"%W%j%1!<%7%g%s$,4|BT$9$k%(%s%3!<%G%#%s%0$r(B cgi.rb $B$K(B $B65$($F$d$k$7$+$J$$$7!"$=$&$9$k$N$,NI$$$H;W$$$^$9!#(B $B;EMM$H$7$F$O%V%i%&%6$,%G!<%?$rAw$C$F$/$k860x$H$J$C$?(B HTML $B$N(B form $B$N(B accept-charset $B$r(B cgi.rb $B$K(B $B65$($F$d$k(B ($B$H$$$&$3$H$K$7$F$*$/(B) $B$s$8$c$J$$$G$7$g$&$+!#(B $B$^$!!"(Baccept-charset $B$K8B$i$:(B form $B$N>pJs$r65$($F$d$k$H$$$m(B $B$$$m8!::$G$-$F$$$$$+$b$7$l$^$;$s$,!#(B
on 11.09.2008 07:11
$BF#2,$G$9!#(B Tanaka Akira $B$5$s$O=q$-$^$7$?(B: >> encoding$B>pJs$O$b$i$($J$$$N$G!"4|BT$9$k$7$+$J$$$G$9!#(B >> $B$@$+$i$H$$$C$F(BASCII-8BIT$B$+(BUS-ASCII$B$N$I$A$i$G$7$+(B >> $B%G!<%?$rLc$($J$$$H$$$&$N$bLLE]$+$J$H;W$&$N$G$9$,!"(B >> $B$I$&$7$?$i$$$$$H;W$$$^$9$+!)(B > > $B%"%W%j%1!<%7%g%s$,4|BT$9$k%(%s%3!<%G%#%s%0$r(B cgi.rb $B$K(B > $B65$($F$d$k$7$+$J$$$7!"$=$&$9$k$N$,NI$$$H;W$$$^$9!#(B > $BN;2r$G$9!#(B > $B;EMM$H$7$F$O%V%i%&%6$,%G!<%?$rAw$C$F$/$k860x$H$J$C$?(B HTML $B$N(B > form $B$N(B accept-charset $B$r(B cgi.rb $B$K(B > $B65$($F$d$k(B ($B$H$$$&$3$H$K$7$F$*$/(B) $B$s$8$c$J$$$G$7$g$&$+!#(B > $BAw$i$l$F$/$k(BForm$B$K(Baccept-charset$B$r$D$1$F$b!"(B IE$B$b(BFirefox$B$bBP1~$7$F$$$J$$$N$G!"<B<AL50UL#$@$H;W$$$^$9!#(B hidden$BB0@-$G(Baccept-charset$B$rAw$k$H$$$&$3$H$G$9$+!)(B $B$=$l$@$C$?$i8=<BE*$+$J!#(B
on 12.09.2008 21:29
In article <48C8A83E.8000200@rabbix.jp>, Fujioka <fuj@rabbix.jp> writes: > $BAw$i$l$F$/$k(BForm$B$K(Baccept-charset$B$r$D$1$F$b!"(B > IE$B$b(BFirefox$B$bBP1~$7$F$$$J$$$N$G!"<B<AL50UL#$@$H;W$$$^$9!#(B $B8@MU$,B-$j$J$+$C$?$h$&$G$9!#(B Web $B%5!<%P$,(B form $B$r4^$`(B HTML $B$rAw$C$?;~$K!"%V%i%&%6$,$I$N$h(B $B$&$J(B charset $B$GJV;v$r(B Web $B%5!<%PJV$9$Y$-$+$r(B accept-charset $B$N$h$&$JL@<(E*$J7A$d!"(BHTML $B<+BN$N(B encoding $B$H$7$F0EL[$J7A$G(B $B;X<($7$F$$$k$N$G!"$=$N;X<($r(B cgi.rb $B$K65$($F$d$k$H$$$&0UL#$r(B $B0U?^$7$F$$$^$7$?!#(B $B$J$*!"<j85$N(B iceweasel 2.0.0.16 $B$O(B accept-charset $B$rM}2r$7$F(B $B=>$&$h$&$G$9!#(B > hidden$BB0@-$G(Baccept-charset$B$rAw$k$H$$$&$3$H$G$9$+!)(B > $B$=$l$@$C$?$i8=<BE*$+$J!#(B hidden$BB0@-$O9M$($F$$$^$;$s!#(B
on 13.09.2008 18:05
$BF#2,$G$9!#(B > Web $B%5!<%P$,(B form $B$r4^$`(B HTML $B$rAw$C$?;~$K!"%V%i%&%6$,$I$N$h(B > $B$&$J(B charset $B$GJV;v$r(B Web $B%5!<%PJV$9$Y$-$+$r(B accept-charset > $B$N$h$&$JL@<(E*$J7A$d!"(BHTML $B<+BN$N(B encoding $B$H$7$F0EL[$J7A$G(B > $B;X<($7$F$$$k$N$G!"$=$N;X<($r(B cgi.rb $B$K65$($F$d$k$H$$$&0UL#$r(B > $B0U?^$7$F$$$^$7$?!#(B > > $B$J$*!"<j85$N(B iceweasel 2.0.0.16 $B$O(B accept-charset $B$rM}2r$7$F(B > $B=>$&$h$&$G$9!#(B > $B$d$O$j!"L@<(E*$K(Bcgi.rb$B$N%$%s%9%?%s%9$KEA$($F$*$$$?J}$,$h$5$=$&$G$9$M!#(B $B%(%i!<=hM}$H$+2?$b$^$@$J$$$G$9$,!"(B $B$H$j$"$($:2<$N%Q%C%A$G0J2<$N$h$&$J(BCGI$B%"%W%j$OF0$-$^$9!#(B $B$3$NJ}?K$H$7$F$O$$$+$,$G$7$g$&$+!)!d$[$+$N0U8+$"$j$=$&$JJ}!9(B $B$"$H!"%(%s%3!<%G%#%s%0$,0c$&J8;zNs$rAw$j$D$1$i$l$?>l9g$K(B $B$I$&$9$k$+$G$9$,!"(B 1. $BJ|CV!J$*$=$i$/$I$3$+$GNc30$r5/$3$7$F;_$^$k!K(B 2. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$4$HL5;k$9$k(B 3. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$O$"$k$1$ICf?H$r(Bnil$B$K$9$k(B 4. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bvalue$B$r(BASCII-8BIT$B$K$7$F$7$^$&(B 4$B$,?F@Z$+$J$H;W$&$N$G$9$,!"$40U8+$h$m$7$/$*4j$$$7$^$9!#(B #!/Users/fujioka/local/bin/ruby19 # vim:fileencoding=UTF-8 require 'cgi' @cgi=CGI.new("html3","UTF-8") @header = { "type" => "text/html", "charset" => "UTF-8" } @cgi.out(@header) do @cgi.html do @cgi.head{@cgi.title{"$B$?$$$H$k(B"}}+ @cgi.body do "$B7k2L(B:#{@cgi['title']}"+ @cgi.form("action"=>@cgi.script_name) do @cgi.text_field("name"=>"title")+ @cgi.hidden("name"=>"key","value"=>"value")+ @cgi.submit("value"=>"OK") end end end end Index: lib/cgi/core.rb =================================================================== --- lib/cgi/core.rb (revision 19280) +++ lib/cgi/core.rb (working copy) @@ -600,7 +600,7 @@ stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or '' else read_from_cmdline - end + end.force_encoding(@encoding) ) end @@ -667,7 +667,8 @@ # from the command line or (failing that) from standard input. Otherwise, # cookies and other parameters are parsed automatically from the standard # CGI locations, which varies according to the REQUEST_METHOD. - def initialize(type = "query") + def initialize(type = "query",encoding="ASCII-8BIT") + @encoding=encoding if defined?(MOD_RUBY) && !ENV.key?("GATEWAY_INTERFACE") Apache.request.setup_cgi_env end
on 16.09.2008 10:41
$B@>;3OB9-$G$9!#(B At Sun, 14 Sep 2008 00:27:27 +0900, Fujioka wrote: > > $B$"$H!"%(%s%3!<%G%#%s%0$,0c$&J8;zNs$rAw$j$D$1$i$l$?>l9g$K(B > $B$I$&$9$k$+$G$9$,!"(B > 1. $BJ|CV!J$*$=$i$/$I$3$+$GNc30$r5/$3$7$F;_$^$k!K(B > 2. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$4$HL5;k$9$k(B > 3. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$O$"$k$1$ICf?H$r(Bnil$B$K$9$k(B > 4. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bvalue$B$r(BASCII-8BIT$B$K$7$F$7$^$&(B > 4$B$,?F@Z$+$J$H;W$&$N$G$9$,!"$40U8+$h$m$7$/$*4j$$$7$^$9!#(B $B%P%$%J%j%U%!%$%k$N%"%C%W%m!<%I$r$9$k$H$-$K(B2$B$d(B3$B$@$H:$$j$=$&$G$9!#(B
on 16.09.2008 11:20
On Tue, 16 Sep 2008 17:33:08 +0900 In article <85r67k4h6t.wl%zn@mbf.nifty.com> [[ruby-dev:36321] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Kazuhiro NISHIYAMA <zn@mbf.nifty.com> wrote: > > $B$"$H!"%(%s%3!<%G%#%s%0$,0c$&J8;zNs$rAw$j$D$1$i$l$?>l9g$K(B > > $B$I$&$9$k$+$G$9$,!"(B > > 1. $BJ|CV!J$*$=$i$/$I$3$+$GNc30$r5/$3$7$F;_$^$k!K(B > > 2. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$4$HL5;k$9$k(B > > 3. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$O$"$k$1$ICf?H$r(Bnil$B$K$9$k(B > > 4. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bvalue$B$r(BASCII-8BIT$B$K$7$F$7$^$&(B > > 4$B$,?F@Z$+$J$H;W$&$N$G$9$,!"$40U8+$h$m$7$/$*4j$$$7$^$9!#(B > > $B%P%$%J%j%U%!%$%k$N%"%C%W%m!<%I$r$9$k$H$-$K(B2$B$d(B3$B$@$H:$$j$=$&$G$9!#(B multipart/form-data $B$G!"$+$D(B Content-Disposition filename $B$r;}$C$F$$$l$P(B ASCII-8BIT $B$G!"$=$&$G$J$1$l$P8!>Z!!$H$+!#(B
on 16.09.2008 14:19
$BF#2,$G$9!#(B >> $B$"$H!"%(%s%3!<%G%#%s%0$,0c$&J8;zNs$rAw$j$D$1$i$l$?>l9g$K(B >> $B$I$&$9$k$+$G$9$,!"(B >> 1. $BJ|CV!J$*$=$i$/$I$3$+$GNc30$r5/$3$7$F;_$^$k!K(B >> 2. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$4$HL5;k$9$k(B >> 3. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$O$"$k$1$ICf?H$r(Bnil$B$K$9$k(B >> 4. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bvalue$B$r(BASCII-8BIT$B$K$7$F$7$^$&(B >> 4$B$,?F@Z$+$J$H;W$&$N$G$9$,!"$40U8+$h$m$7$/$*4j$$$7$^$9!#(B > > $B%P%$%J%j%U%!%$%k$N%"%C%W%m!<%I$r$9$k$H$-$K(B2$B$d(B3$B$@$H:$$j$=$&$G$9!#(B > $B%U%!%$%k$O<u<h(Bencoding$B$,;XDj$5$l$F$$$F$b(BASCII-8BIT$B$,(B $BE,@Z$8$c$J$$$+$H;W$$$^$9!#(B $B%U%!%$%k0J30$NOC$@$C$?$i#2$H$+#3$O$$$+$,$G$7$g$&!)(B
on 16.09.2008 15:16
$B@.@%$G$9!#(B Fujioka wrote: > $B$"$H!"%(%s%3!<%G%#%s%0$,0c$&J8;zNs$rAw$j$D$1$i$l$?>l9g$K(B > $B$I$&$9$k$+$G$9$,!"(B > 1. $BJ|CV!J$*$=$i$/$I$3$+$GNc30$r5/$3$7$F;_$^$k!K(B > 2. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$4$HL5;k$9$k(B > 3. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bkey$B$O$"$k$1$ICf?H$r(Bnil$B$K$9$k(B > 4. $B8!>Z$7$F$*$+$7$+$C$?$H$-$O(Bvalue$B$r(BASCII-8BIT$B$K$7$F$7$^$&(B > 4$B$,?F@Z$+$J$H;W$&$N$G$9$,!"$40U8+$h$m$7$/$*4j$$$7$^$9!#(B 5. $B$+$^$o$:;XDj$5$l$?(B encoding $B$r$D$1$k(B $B$8$c$J$$$G$9$+$M!#(B String#valid_encoding? $B$GD4$Y$k$H$+!"8e$GBP=h$9$kJ}K!$O$"$k$N$G$9$+$i!#(B
on 16.09.2008 15:16
$B@.@%$G$9!#(B Fujioka wrote: > $BE,@Z$8$c$J$$$+$H;W$$$^$9!#(B > $B%U%!%$%k0J30$NOC$@$C$?$i#2$H$+#3$O$$$+$,$G$7$g$&!)(B $B%P%$%J%j%U%!%$%k$@$C$?$i(B ASCII-8BIT $B$,$h$$$G$9$7!"(B $B%F%-%9%H%U%!%$%k$J$i%(%s%3!<%G%#%s%08GDj$+$b$7$l$J$$$o$1$G!"(B $B$3$l$bJLES<u$1<h$j(B encoding $B$r;XDj$5$;$k$Y$-$G$7$g$&!#(B
on 17.09.2008 04:31
On Tue, 16 Sep 2008 21:37:12 +0900 In article <48CFAA31.1080709@airemix.jp> [[ruby-dev:36332] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] "NARUSE, Yui" <naruse@airemix.jp> wrote: > 5. $B$+$^$o$:;XDj$5$l$?(B encoding $B$r$D$1$k(B > > $B$8$c$J$$$G$9$+$M!#(B > String#valid_encoding? $B$GD4$Y$k$H$+!"8e$GBP=h$9$kJ}K!$O$"$k$N$G$9$+$i!#(B bad knowhow $B$K$J$j$=$&$GI]$$$G$9!#(B cgi = CGI.new('UTF-8') unless cgi.param.join.valid_encoding? print cgi.header('status' => '400 Bad Request') print 'Bad Request' exit end $BEy$N%3!<%I$rKhEY=q$/$+26%i%$%V%i%j$K$9$kI,MW$,$"$k$o$1$G!#(B
on 17.09.2008 04:57
$BF#2,$G$9!#(B >> 5. $B$+$^$o$:;XDj$5$l$?(B encoding $B$r$D$1$k(B >> >> $B$8$c$J$$$G$9$+$M!#(B >> String#valid_encoding? $B$GD4$Y$k$H$+!"8e$GBP=h$9$kJ}K!$O$"$k$N$G$9$+$i!#(B > > bad knowhow $B$K$J$j$=$&$GI]$$$G$9!#(B > bad knowhow$B$K$J$k$0$i$$$@$C$?$i<BAu$7$?$$$G$9$M!#(B > cgi = CGI.new('UTF-8') > unless cgi.param.join.valid_encoding? > print cgi.header('status' => '400 Bad Request') > print 'Bad Request' > exit > end > > $BEy$N%3!<%I$rKhEY=q$/$+26%i%$%V%i%j$K$9$kI,MW$,$"$k$o$1$G!#(B > $B$3$l$@$H(BEUC-JP$B$H(BUTF-8$B$rAw$j$D$1$i$l$?$H$-$K(Bjoin$B$N;~E@$GNc30$J$h$&$J!#(B $B$H$$$&OC$O$5$F$*$-!"(B new$B$9$k$H$-$N%*%W%7%g%s$G4|BT$9$k5sF0$r@Z$jBX$($i$l$k$H(B $B;H$$$d$9$$$G$7$g$&$+$M!)(B cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>true) $B$_$?$$$K!#(B
on 17.09.2008 05:33
On Wed, 17 Sep 2008 11:49:12 +0900 In article <48D071E7.1090907@rabbix.jp> [[ruby-dev:36342] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Fujioka <fuj@rabbix.jp> wrote: > > > cgi = CGI.new('UTF-8') > > unless cgi.param.join.valid_encoding? > > print cgi.header('status' => '400 Bad Request') > > print 'Bad Request' > > exit > > end > > > > $BEy$N%3!<%I$rKhEY=q$/$+26%i%$%V%i%j$K$9$kI,MW$,$"$k$o$1$G!#(B > > > $B$3$l$@$H(BEUC-JP$B$H(BUTF-8$B$rAw$j$D$1$i$l$?$H$-$K(Bjoin$B$N;~E@$GNc30$J$h$&$J!#(B force_encoding $B$5$l$F$$$k!"$H$$$&A0Ds$J$N$G!"Nc30$O$J$$$O$:!#(B > new$B$9$k$H$-$N%*%W%7%g%s$G4|BT$9$k5sF0$r@Z$jBX$($i$l$k$H(B > $B;H$$$d$9$$$G$7$g$&$+$M!)(B > > cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>true) $B%G%U%)%k%H%A%'%C%/$r4uK>!#(B $B:.:_$7$?(Bor$BIT@5$J%(%s%3!<%G%#%s%0$r<u$1IU$1$k$3$H$NJ}$,Nc30E*$@$H;W$$$^$9!#(B $B%"%C%W%m!<%I$5$l$?%P%$%J%j$O$b$H$b$H=|30$JLu$G!#(B
on 19.09.2008 02:58
$BF#2,$G$9!#(B >>> print cgi.header('status' => '400 Bad Request') >> new$B$9$k$H$-$N%*%W%7%g%s$G4|BT$9$k5sF0$r@Z$jBX$($i$l$k$H(B >> $B;H$$$d$9$$$G$7$g$&$+$M!)(B >> >> cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>true) > > $B%G%U%)%k%H%A%'%C%/$r4uK>!#(B > $B:.:_$7$?(Bor$BIT@5$J%(%s%3!<%G%#%s%0$r<u$1IU$1$k$3$H$NJ}$,Nc30E*$@$H;W$$$^$9!#(B > $B%"%C%W%m!<%I$5$l$?%P%$%J%j$O$b$H$b$H=|30$JLu$G!#(B > $B;d$H$7$F$O%A%'%C%/$rF~$l$?J}$,$$$$$H;W$C$F$$$^$9!#(B cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>false) $B$3$s$J46$8$G$G$-$k$H3Z$+$J$H!#(B $B%U%!%$%k$K4X$7$F$O$9$Y$F(BASCII-8BIT$B$,$$$$$H;W$C$F$$$^$9!#(B
on 21.09.2008 08:26
$BF#2,$G$9!#(B > $B;d$H$7$F$O%A%'%C%/$rF~$l$?J}$,$$$$$H;W$C$F$$$^$9!#(B > cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>false) > $B$3$s$J46$8$G$G$-$k$H3Z$+$J$H!#(B > $B%U%!%$%k$K4X$7$F$O$9$Y$F(BASCII-8BIT$B$,$$$$$H;W$C$F$$$^$9!#(B > * CGI.new$B$N%*%W%7%g%s$G(BHash$B$b<h$l$k$h$&$K$9$k(B $B!J8=>u$O(B"html3"$B$J$I$N(BString$B$N$_!K(B * CGI$B$K(B@@encoding$B$H$$$&%/%i%9JQ?t$rMQ0U$7!"(Bdefault$BCM$O(B"UTF-8"$B$H$9$k(B * CGI::encoding$B$H(BCGI::encoding=$B$H$$$&%a%=%C%I$rMQ0U$7!"(B @@encoding$B$N%;%C%?!<$H%2%C%?!<$K$9$k(B * CGI.new$B$5$l$?$H$-$K%*%W%7%g%s$G(B CGI.new(:encoding=>"EUC-JP")$B$J$I$H;XDj$5$l$J$$>l9g$O(B @@encoding$B$NCM$r(B@encoding$B$KBeF~$9$k(B * $B3F!9$N%(%l%a%s%H$NCM$O(B@encoding$B$NCM$G(Bforce_encoding$B$7!"(B valid_encoding?$B$9$k!#$?$@$7!"(Bfile$B$@$1$O(BASCII-8BIT$B$H$9$k!#(B * $B%*%W%7%g%s$N$H$-$K(B:element_encoding_check=>false$B$,M?$($i$l$?$H$-$O(B $B%(%s%3!<%G%#%s%0%A%'%C%/$7$J$$!#(B * encoding$B$N%A%'%C%/$r$7$F@5$7$/$J$$>l9g$O(BASCII-8BIT$B$K(B force_encoding$B$7$F$7$^$&(B $B0J>e$N$h$&$J;EMM$G$O$$$+$,$G$7$g$&$+!)(B $B%5%s%W%k%Y!<%9$G9T$/$H!"(B require 'cgi' @cgi=CGI.new("html3") $B$H$d$C$?>l9g$O<u$1<h$C$?CM$O(BUTF-8$B$H$_$J$7!"(Bencoding$B$N%A%'%C%/$rF~$l$k!#(B $B%?%0%a!<%+!<$O(Bhtml3$B$H$9$k!#(B EUC-JP$B$K$9$k>l9g$O(B require 'cgi' CGI::encoding="EUC-JP" @cgi=CGI.new("html3") $B$b$7$/$O(B require 'cgi' @cgi=CGI.new(:tag_maker=>"html3",:encoding=>"EUC-JP") $B$H$9$k!#%(%s%3!<%G%#%s%0$N%A%'%C%/$r$7$J$$>l9g$O(B require 'cgi' @cgi=CGI.new(:tag_maker=>"html3",:encoding=>"EUC-JP",:element_encoding_check=>false) $B$H$$$C$?$h$&$K%$%s%9%?%s%9$X%*%W%7%g%s$GEO$9!#(B $B0J>e$N$h$&$J;H$$>!<j$K$J$j$^$9!#(B
on 21.09.2008 14:58
$B@>;3OB9-$G$9!#(B At Sun, 21 Sep 2008 15:17:28 +0900, Fujioka wrote: > > * $B3F!9$N%(%l%a%s%H$NCM$O(B@encoding$B$NCM$G(Bforce_encoding$B$7!"(B > valid_encoding?$B$9$k!#$?$@$7!"(Bfile$B$@$1$O(BASCII-8BIT$B$H$9$k!#(B $B%U%!%$%k$+$I$&$+$O$I$&$d$C$FH=CG$9$k$N$G$7$g$&$+(B?
on 21.09.2008 17:06
$BF#2,$G$9!#(B > At Sun, 21 Sep 2008 15:17:28 +0900, > Fujioka wrote: >> * $B3F!9$N%(%l%a%s%H$NCM$O(B@encoding$B$NCM$G(Bforce_encoding$B$7!"(B >> valid_encoding?$B$9$k!#$?$@$7!"(Bfile$B$@$1$O(BASCII-8BIT$B$H$9$k!#(B > > $B%U%!%$%k$+$I$&$+$O$I$&$d$C$FH=CG$9$k$N$G$7$g$&$+(B? > finename$B$,$"$C$?$i(BASCII-8BIT$B8GDj$K$9$k$N$,$$$$$+$J$H;W$C$F$$$^$9!#(B $B%U%!%$%k$bFCJL07$$$7$J$$J}$,$$$$$H;W$$$^$9$+!)(B
on 21.09.2008 18:07
$B@.@%$G$9!#(B Fujioka $B$5$s$O=q$-$^$7$?(B: > $BF#2,$G$9!#(B > >> At Sun, 21 Sep 2008 15:17:28 +0900, >> Fujioka wrote: >>> * $B3F!9$N%(%l%a%s%H$NCM$O(B@encoding$B$NCM$G(Bforce_encoding$B$7!"(B >>> valid_encoding?$B$9$k!#$?$@$7!"(Bfile$B$@$1$O(BASCII-8BIT$B$H$9$k!#(B >> $B%U%!%$%k$+$I$&$+$O$I$&$d$C$FH=CG$9$k$N$G$7$g$&$+(B? >> > finename$B$,$"$C$?$i(BASCII-8BIT$B8GDj$K$9$k$N$,$$$$$+$J$H;W$C$F$$$^$9!#(B > $B%U%!%$%k$bFCJL07$$$7$J$$J}$,$$$$$H;W$$$^$9$+!)(B Content-Type $B$r8+$l$P%G!<%?$,J8;zNs$+%P%$%J%j$+$O$o$+$k$N$G!"(B $B$=$l$r8+$k$N$,$$$$$N$G$O$J$$$G$7$g$&$+!#(B
on 21.09.2008 18:21
$BF#2,$G$9!#(B >> finename$B$,$"$C$?$i(BASCII-8BIT$B8GDj$K$9$k$N$,$$$$$+$J$H;W$C$F$$$^$9!#(B >> $B%U%!%$%k$bFCJL07$$$7$J$$J}$,$$$$$H;W$$$^$9$+!)(B > > Content-Type $B$r8+$l$P%G!<%?$,J8;zNs$+%P%$%J%j$+$O$o$+$k$N$G!"(B > $B$=$l$r8+$k$N$,$$$$$N$G$O$J$$$G$7$g$&$+!#(B > $BEj9F$7$F$+$i;d$b$=$N$[$&$,$$$$$J$H;W$C$F$$$^$7$?!#(B Content-Type$B$r8+$k$h$&$K:n$C$F$_$^$9!#(B
on 21.09.2008 18:30
$B@>;3OB9-$G$9!#(B At Mon, 22 Sep 2008 01:11:44 +0900, Fujioka wrote: > > >> finename$B$,$"$C$?$i(BASCII-8BIT$B8GDj$K$9$k$N$,$$$$$+$J$H;W$C$F$$$^$9!#(B > >> $B%U%!%$%k$bFCJL07$$$7$J$$J}$,$$$$$H;W$$$^$9$+!)(B > > > > Content-Type $B$r8+$l$P%G!<%?$,J8;zNs$+%P%$%J%j$+$O$o$+$k$N$G!"(B > > $B$=$l$r8+$k$N$,$$$$$N$G$O$J$$$G$7$g$&$+!#(B > > > $BEj9F$7$F$+$i;d$b$=$N$[$&$,$$$$$J$H;W$C$F$$$^$7$?!#(B > Content-Type$B$r8+$k$h$&$K:n$C$F$_$^$9!#(B $B<u$1<h$k(BCGI$BB&$G$O$J$/Aw$k(BUser-Agent$BB&$G(BASCII-8BIT$B$K$J$k$+$I$&$+(B $B7h$a$i$l$k$H8@$&$3$H$O!"(Bencoding$B$N%A%'%C%/$r$9$jH4$1$i$l$k%j%/%(%9%H$r(B $BAw$j$D$1$i$l$k$H8@$&$3$H$K$J$j$=$&$G$9$,!"%;%-%e%j%F%#E*$KLdBj$O(B $B$J$$$N$G$7$g$&$+(B?
on 21.09.2008 19:23
$BF#2,$G$9!#(B > $BAw$j$D$1$i$l$k$H8@$&$3$H$K$J$j$=$&$G$9$,!"%;%-%e%j%F%#E*$KLdBj$O(B > $B$J$$$N$G$7$g$&$+(B? > $B%(%s%3!<%G%#%s%0$N%A%'%C%/$O$"$/$^$G;H$$>!<j$NLdBj$NOC$G$"$C$F(B $B%;%-%e%j%F%#%A%'%C%/$N$D$b$j$O$J$+$C$?$N$G!"LdBj$J$$$H;W$C$F$$$^$7$?!#(B $B8=>u$N(Bcgi.rb$B$G$O%(%s%3!<%G%#%s%0%A%'%C%/$OB8:_$;$:!"(B $BAw$j$D$1$i$l$?$b$N$O%*%V%8%'%/%H$r@8@.$7$^$9!#(B $B$3$l$r%A%'%C%/$9$k$H$7$?$i!"(B CGI.new$B$G%*%W%F%g%s$rEO$7$F<u$1<h$k%(%l%a%s%H$H%(%s%3!<%G%#%s%0$r(B $BC`0l;XDj$9$kI,MW$,=P$F$-$^$9!#(B $B$=$&$J$k$H;H$$>!<j$,0-$$$+$J$H;W$C$F$$$^$9!#(B
on 22.09.2008 04:05
On Mon, 22 Sep 2008 01:11:44 +0900 In article <48D67424.2060409@rabbix.jp> [[ruby-dev:36430] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Fujioka <fuj@rabbix.jp> wrote: > $BEj9F$7$F$+$i;d$b$=$N$[$&$,$$$$$J$H;W$C$F$$$^$7$?!#(B > Content-Type$B$r8+$k$h$&$K:n$C$F$_$^$9!#(B > $BDL>o$N%U%#!<%k%I$G$O(BContent-Type$B$OEO$5$l$^$;$s$,!"%U%!%$%k$N>l9g$O(B Content-Type:text/plain $B$J$s$F$3$H$b$"$jF@$^$9!#(B Content-Type$B$NM-L5$O?.Mj@-$,$J$$$H;W$$$^$9!#(B
on 22.09.2008 04:07
On Sun, 21 Sep 2008 15:17:28 +0900 In article <48D5E8D8.2030205@rabbix.jp> [[ruby-dev:36422] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Fujioka <fuj@rabbix.jp> wrote: > * encoding$B$N%A%'%C%/$r$7$F@5$7$/$J$$>l9g$O(BASCII-8BIT$B$K(B > force_encoding$B$7$F$7$^$&(B $BNc30$r5/$3$9$+!"2?$i$+$N7A$G!VIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?!W$H$$$&$3$H(B $B$r8!=P$G$-$kJ}K!$,M_$7$$$G$9!#(B # $BIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?$i(B 400 $BEy$N%9%F!<%?%9$GB(=*N;!#(B
on 22.09.2008 04:31
$BF#2,$G$9!#(B >> $BEj9F$7$F$+$i;d$b$=$N$[$&$,$$$$$J$H;W$C$F$$$^$7$?!#(B >> Content-Type$B$r8+$k$h$&$K:n$C$F$_$^$9!#(B >> > $BDL>o$N%U%#!<%k%I$G$O(BContent-Type$B$OEO$5$l$^$;$s$,!"%U%!%$%k$N>l9g$O(B > Content-Type:text/plain $B$J$s$F$3$H$b$"$jF@$^$9!#(B > Content-Type$B$NM-L5$O?.Mj@-$,$J$$$H;W$$$^$9!#(B > Content-Type$B$,$"$l$P%U%!%$%k$H$_$J$9$D$b$j$G$7$?!#(B >> * encoding$B$N%A%'%C%/$r$7$F@5$7$/$J$$>l9g$O(BASCII-8BIT$B$K(B >> force_encoding$B$7$F$7$^$&(B > > $BNc30$r5/$3$9$+!"2?$i$+$N7A$G!VIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?!W$H$$$&$3$H(B > $B$r8!=P$G$-$kJ}K!$,M_$7$$$G$9!#(B > > # $BIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?$i(B 400 $BEy$N%9%F!<%?%9$GB(=*N;!#(B > $BB(=*N;$9$k$N$O$=$N$h$&$K%3!<%G%#%s%0$7$F$b$i$&$H$7$F!"(B $B2?$i$+$N7A$NItJ,$N4uK>$O$"$j$^$9$+!)(B $BNc$($P(B@encoding_errors$B$N(Barray$B$r:n$C$F9`L\L>$r%W%C%7%e$9$k$H$+(B
on 22.09.2008 12:04
On Mon, 22 Sep 2008 11:22:44 +0900 In article <48D7035D.3020404@rabbix.jp> [[ruby-dev:36436] Re: [Feature #542] cgi.rb : CGI::unescape return encoding] Fujioka <fuj@rabbix.jp> wrote: > >> $BEj9F$7$F$+$i;d$b$=$N$[$&$,$$$$$J$H;W$C$F$$$^$7$?!#(B > >> Content-Type$B$r8+$k$h$&$K:n$C$F$_$^$9!#(B > >> > > $BDL>o$N%U%#!<%k%I$G$O(BContent-Type$B$OEO$5$l$^$;$s$,!"%U%!%$%k$N>l9g$O(B > > Content-Type:text/plain $B$J$s$F$3$H$b$"$jF@$^$9!#(B > > Content-Type$B$NM-L5$O?.Mj@-$,$J$$$H;W$$$^$9!#(B > > > Content-Type$B$,$"$l$P%U%!%$%k$H$_$J$9$D$b$j$G$7$?!#(B Content-Type $B$NM-L5$G%U%!%$%k$+H]$+$O8!=P$G$-$J$+$C$?$h$&$J!#(B > $BNc$($P(B@encoding_errors$B$N(Barray$B$r:n$C$F9`L\L>$r%W%C%7%e$9$k$H$+(B $B8D?ME*$K$O!"$I$N%U%#!<%k%I$,IT@5$J$N$+$H$$$&$3$H$K6=L#$O$J$$$N$G!"(B true/false $B$,JV$kDxEY$G9=$$$^$;$s!#B>$N?M$N0U8+$bJ9$-$?$$$G$9!#(B $BH4$17j$rKI$0$H$$$&0UL#$G$ONc30$NJ}$,$$$$$N$+$J$"!#(B
on 22.09.2008 12:28
$B@>;3OB9-$G$9!#(B At Mon, 22 Sep 2008 18:55:07 +0900, Tietew wrote: > > $B2?$i$+$N7A$NItJ,$N4uK>$O$"$j$^$9$+!)(B > > $BNc$($P(B@encoding_errors$B$N(Barray$B$r:n$C$F9`L\L>$r%W%C%7%e$9$k$H$+(B > > $B8D?ME*$K$O!"$I$N%U%#!<%k%I$,IT@5$J$N$+$H$$$&$3$H$K6=L#$O$J$$$N$G!"(B > true/false $B$,JV$kDxEY$G9=$$$^$;$s!#B>$N?M$N0U8+$bJ9$-$?$$$G$9!#(B > > $BH4$17j$rKI$0$H$$$&0UL#$G$ONc30$NJ}$,$$$$$N$+$J$"!#(B $BIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?$H$-$K<B9T$9$k%V%m%C%/$r;XDj$G$-$k(B $B$h$&$K$7$F!";XDj$,$J$+$C$?>l9g$N%G%U%)%k%H$ONc30$G!"$I$N%U%#!<%k%I$+(B $BCN$j$?$1$l$P$=$3$G;D$9$h$&$K$9$k$H$+(B?
on 22.09.2008 12:38
In article <20080922175752.2734.FC96BA9B@tietew.net>, Tietew <tietew@tietew.net> writes: > $B8D?ME*$K$O!"$I$N%U%#!<%k%I$,IT@5$J$N$+$H$$$&$3$H$K6=L#$O$J$$$N$G!"(B > true/false $B$,JV$kDxEY$G9=$$$^$;$s!#B>$N?M$N0U8+$bJ9$-$?$$$G$9!#(B > > $BH4$17j$rKI$0$H$$$&0UL#$G$ONc30$NJ}$,$$$$$N$+$J$"!#(B $BIaDL$ONc30$G!"<+J,$G3N$+$a$k$H$$$&$R$H$N$?$a$K8!::$7$J$$A*Br(B $B;h$r$D$1$k!"$H$$$&$"$?$j$8$c$J$$$G$9$+!#(B CGI.new(:accept_encoding=>"...", "name1"=>:file, "name2"=>...) $B$G!"8!::$7$J$$$J$i(B CGI.new(:accept_encoding=>:no_validation, "name1"=>:file, "name2"=>...) $B$H$+!#(B
on 22.09.2008 12:57
In article <877i94v53d.fsf@fsij.org>, Tanaka Akira <akr@fsij.org> writes: > $B$G!"8!::$7$J$$$J$i(B > > CGI.new(:accept_encoding=>:no_validation, $B8!::$7$J$$$J$i(B "ASCII-8BIT" $B$r;XDj$9$k$@$1$G$$$$$+$b!#(B
on 22.09.2008 13:31
$BF#2,$G$9!#(B >> $B8D?ME*$K$O!"$I$N%U%#!<%k%I$,IT@5$J$N$+$H$$$&$3$H$K6=L#$O$J$$$N$G!"(B >> true/false $B$,JV$kDxEY$G9=$$$^$;$s!#B>$N?M$N0U8+$bJ9$-$?$$$G$9!#(B >> >> $BH4$17j$rKI$0$H$$$&0UL#$G$ONc30$NJ}$,$$$$$N$+$J$"!#(B > > $BIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?$H$-$K<B9T$9$k%V%m%C%/$r;XDj$G$-$k(B > $B$h$&$K$7$F!";XDj$,$J$+$C$?>l9g$N%G%U%)%k%H$ONc30$G!"$I$N%U%#!<%k%I$+(B > $BCN$j$?$1$l$P$=$3$G;D$9$h$&$K$9$k$H$+(B? > $B$3$l!"%3!<%I$N%5%s%W%k$r:n$l$^$;$s$G$7$g$&$+!)(B $B$3$s$JIw$K;H$$$?$$$_$?$$$J$d$D!#(B
on 22.09.2008 13:45
$BF#2,$G$9!#(B
> $B$H$+!#(B
$B$3$s$J46$8$G9`L\Kh$K%A%'%C%/$rMW5a$9$k$H!"(B
$B:#$"$k%&%'%V%"%W%j!J(BtDiary$B$d(BHiki$B$J$I$b4^$`!K$O(B
$B8.JB$_@_7W$r$7D>$7$K$J$k$H;W$$$^$9!#(B
$BM}M3$O$?$$$F$$$N%"%W%j$O(Bcgi=CGI.new$B$r%"%W%j$N:G=i$K$d$C$F$*$$$F!"(B
$B$=$l$+$i(Bcgi$B$r0z$-2s$9@_7W$K$J$C$F$$$k$+$i$G$9!#(B
$B$^$?!"(BCGI.new$B$7$?$H$-$K%/%(%j$r%Q!<%9$7$F$$$k$N$G$9$,!"(B
CGI.new$B$9$kA0$K(BURL$B$O$o$+$C$F$$$^$;$s$N$G!"(B
$B$I$N9`L\$r<u$1<h$l$k$h$&$K$9$k$+$rCN$i$;$k$3$H$,:$Fq$G$9!#(B
$B$@$+$i$H$$$C$F!"%&%'%V%"%W%j$G;H$&9`L\$rA4It=q$/$N$b(B
$B8=<BE*$G$O$"$j$^$;$s$7!"F0E*$JL>A0$,<u$1IU$1$i$l$J$$$N$b:$$j$^$9!#(B
$B$=$N$?$a!";d$O3F9`L\L>Kh$N%A%'%C%/$OF~$l$?$/$"$j$^$;$s!#(B
$B%;%-%e%j%F%#E*$KLdBj$@$H$7$?$i!"MFNL%A%'%C%/$d(B
$B9`L\?t$N>e8B$r@_Dj$9$kJ}$,!"(B
$B;H$$>!<j$NLL$G$$$$$N$G$O$J$$$+$H;W$C$F$$$^$9!#(B
on 22.09.2008 15:24
$B@>;3OB9-$G$9!#(B At Mon, 22 Sep 2008 20:17:26 +0900, Fujioka wrote: > > > $BIT@5%(%s%3!<%G%#%s%0$r8!=P$7$?$H$-$K<B9T$9$k%V%m%C%/$r;XDj$G$-$k(B > > $B$h$&$K$7$F!";XDj$,$J$+$C$?>l9g$N%G%U%)%k%H$ONc30$G!"$I$N%U%#!<%k%I$+(B > > $BCN$j$?$1$l$P$=$3$G;D$9$h$&$K$9$k$H$+(B? > > > $B$3$l!"%3!<%I$N%5%s%W%k$r:n$l$^$;$s$G$7$g$&$+!)(B > $B$3$s$JIw$K;H$$$?$$$_$?$$$J$d$D!#(B Rails$B$G(Bvalidate$B$K$R$C$+$+$C$?$H$-$K@V$$OH$,$D$$$?$j$9$k$h$&$J46$8$G(B $B0J2<$N$h$&$K0z$C$+$+$C$?%U%#!<%k%I$K2?$+0u$r$D$1$k$N$K;H$($k$+$b!"(B $B$H$$$&%$%a!<%8$G$9!#(B invalid_fields = {} cgi = CGI.new(..., :... =>proc {|field_name, field_value| invalid_fields[field_name] = field_value }) ... cgi.out(...) { ... cgi.text_field({...,"name"=>"some_text", "class"=> invalid_fields.include?("some_text") ? "invalid" : "" }) ... }
on 22.09.2008 16:39
$BF#2,$G$9!#(B > ... > cgi.text_field({...,"name"=>"some_text", "class"=> > invalid_fields.include?("some_text") ? "invalid" : "" > }) > ... > } > > $B$3$s$J46$8$G$7$g$&$+!#(B invalid_fields={} cgi=CGI.new(:accept_charset=>"EUC-JP"){|field_name,field_value| invalid_fields[field_name] = field_value } $B$3$s$J46$8$G;H$($^$9!#(Bnew$B$N%V%m%C%/$KEO$9$N$O$$$$$N$+$I$&$+HyL/$G$9$,!#(B $B%a%=%C%I$N%V%m%C%/$,6u$$$F$$$k$N$G5M$a9~$s$G$_$^$7$?!#(B Index: lib/cgi/core.rb =================================================================== --- lib/cgi/core.rb ($B%j%S%8%g%s(B 19454) +++ lib/cgi/core.rb ($B:n6H%3%T!<(B) @@ -598,8 +598,21 @@ stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or '' else read_from_cmdline - end + end.dup.force_encoding(@accept_charset) ) + if @accept_charset!="ASCII-8BIT" || @accept_charset!=Encoding::ASCII_8BIT + @params.each do |key,values| + values.each do |value| + unless value.valid_encoding? + if @accept_charset_error_block + @accept_charset_error_block.call(key,value) + else + raise "Accept-Charset encoding error" + end + end + end + end + end end @cookies = CGI::Cookie::parse((env_table['HTTP_COOKIE'] or env_table['COOKIE'])) @@ -665,7 +678,24 @@ # from the command line or (failing that) from standard input. Otherwise, # cookies and other parameters are parsed automatically from the standard # CGI locations, which varies according to the REQUEST_METHOD. - def initialize(type = "query") + attr_reader :accept_charset + @@accept_charset="UTF-8" + def self.accept_charset + @@accept_charset + end + def self.accept_charset=(accept_charset) + @@accept_charset=accept_charset + end + def initialize(options = {},&block) + @accept_charset_error_block=block if block_given? + @options={:accept_charset=>@@accept_charset} + case options + when Hash + @options.merge!(options) + when String + @options[:tag_maker]=options + end + @accept_charset=@options[:accept_charset] if defined?(MOD_RUBY) && !ENV.key?("GATEWAY_INTERFACE") Apache.request.setup_cgi_env end @@ -677,7 +707,7 @@ @output_cookies = nil @output_hidden = nil - case type + case @options[:tag_maker] when "html3" require 'cgi/html' extend Html3
on 22.09.2008 17:01
$BF#2,$G$9!#(B > $B$3$s$J46$8$G$7$g$&$+!#(B > invalid_fields={} > cgi=CGI.new(:accept_charset=>"EUC-JP"){|field_name,field_value| > invalid_fields[field_name] = field_value > } > $B$3$s$J46$8$G;H$($^$9!#(Bnew$B$N%V%m%C%/$KEO$9$N$O$$$$$N$+$I$&$+HyL/$G$9$,!#(B > $B%a%=%C%I$N%V%m%C%/$,6u$$$F$$$k$N$G5M$a9~$s$G$_$^$7$?!#(B > $BBg$-$JH?BP$,$J$1$l$PL@F|$"$?$j$K$H$j$"$($:%3%_%C%H$7$F$7$^$&M=Dj$G$9!#(B $B%^%k%A%Q!<%H$N$[$&$O$^$@2?$b$d$C$F$$$^$;$s$,!"(B $B%(%s%3!<%G%#%s%00JA0$KF0$-$=$&$K$J$$$N$G!"(B $B:#8eBP1~$7$F$$$-$^$9!#(B