Is URI.decode() broken?

e$B@.@%$G$9!#e(B

2009/09/08 13:09, Tietew wrote:

e$B$^$!!"e(BIRI e$B$r%5%]!<%H$7$h$&$H;W$&$He(B NFC e$B$de(B Punycode e$B$,I,MW$K$J$k$N$G!"e(B
e$B8=;~E@$G$O%5%]!<%H$7$h$&$h!*$H$$$&OC$G$O$J$$$G$9!#e(B

e$B0l1~!"e(Brubygemse$B$K!“e(Blibidne$B$r;H$C$?e(Bidn geme$B$,$”$j$^$9!#e(B

e$B:#$OI8=`E:IU%i%$%V%i%j$Ne(B URI e$B$NOC$J$N$G!"e(B
URI e$B$,e(B libidn e$B0MB8$Ne(B gem e$B$K0MB8$7$?>l9g!“e(Bgem
e$B$@$1E:IU$7$F$be(B
e$B$&$l$7$/$J$/!”$7$+$be(B libidn e$B$Oe(B LGPL
e$B$J$N$G$3$l$4$HE:IU$b$O$P$+$i$l!#e(B

e$B$H$$$&$o$1$G!"E:IU$9$k$H$7$?$ie(B idnkit e$B$G$7$g$&$+$M!#e(B
http://www.nic.ad.jp/ja/tech/idn.html
http://www.sera.desuyo.net/idnkit/

2009/09/07 14:38, Tanaka A. wrote:

encodeURI e$B$N=PNO$+$i!"F~NO$rF@$k$K$O!"L5:9JL$Ke(B %-encoding e$B$re(B
e$B2r$1$P$$$$$N$G!"e(BdecodeURI e$B$G$J$/$F$b$$$$$s$8$c$J$$$G$7$g$&$+!#e(B
decodeURIComponent e$B$G$b$$$$$G$9$7!"e(BCGI.unescape e$B$G$b$+$^$$$^e(B
e$B$;$s!#e(B

decodeURI e$B$O!“e(BencodeURI e$B$,@8@.$9$ke(B %-encoding e$B$O$9$Y$F2r$-$^e(B
e$B$9$,!”$=$&$G$J$$e(B %-encoding e$B$r0lIt2r$+$J$$$3$H$,$“$k$h$&$G$9e(B
e$B$,!”$3$l$O2?$NLr$KN)$D$N$+$J$!e(B?
(e$BNc$($P!“e(BdecodeURI(”%40") e$B$,e(B “%40” e$B$K$J$k$H$+!#e(B)

e$B$I$&$b!"e(BencodeURI/decodeURI e$B$O%%l%%le(B IRI e$B$He(B URI
e$B$re(B
e$BAj8_JQ49$9$k$?$a$N$b$N$N$h$&$G!“0z?t$d7k2L$K0lDj$N2>Dj$,e(B
e$B$”$k$h$&$K8+$($^$9!#e(B

e$BNc$($P!"e(Buserinfo e$B$Ke(B @ e$B$,4^$^$l$F$$$k>l9g!“e(B
e$B$=$l$r2r$$$A$c$&$H2r$$$?7k2L$,e(B IRI
e$B$C$]$$2?$+E*$K$^$:$$!”$H$+!#e(B

e$B$J$N$G!“e(BdecodeURI e$B$,M_$7$$>l9g$Oe(B decodeURI
e$B$=$N$b$N$G$J$$$He(B
e$BET9g$,0-$$$h$&$K;W$$$^$9!#e(B
e$B$$$^$5$i$=$s$J;wHse(B IRI e$B$r%5%]!<%H$9$k5AM}$O$J$$!“e(B
e$B$H$$$&$N$bM-$j$@$H$O;W$$$^$9$,!“e(B
e$B$^$!!”$”$($Fe(B URI.encode_uri e$B$J$s$F$$$&L>A0$GF~$l$F$*$$$F$be(B
e$B0-$/$O$J$$$+$J!”$H$O46$8$^$9!#e(B

e$B$"$H!“e(BencodeURIComponent()e$B$O!”$=$NL>$NDL$je(BURIe$B$N8D!9$N%3%s%]!<%M%s%H$re(B
e$B0z?t$K<h$k;v$rG0F,$K$*$$$?4X?t$G!"e(Bjavascripte$B$G$Oe(BStringe$B7?$7$+$J$$$+$i!“e(B
URIe$B$r%3%s%]!<%M%s%H$KJ,3d$9$k@UL3$rMxMQ<T$KEj$2$F$$$k!#e(B
URIe$B7?$r:n$k$J$i!”$b$&$A$g$C$H%$%s%F%j%8%'%s%H$K$d$C$FM_$7$$$H$$$&5$$b$7$J$/$O$J$$$+$b!#e(B
e$B$h$/CN$i$J$$$1$I!“e(BURI.split()e$B$,$”$k$+$i$K$O!"e(BURIe$B$N9=B$$r$7$C$F$k%/%i%9$J$s$G$9$h$M!)$3$N?M!#e(B

encodeURIComponent e$B$O4pK\E*$J9M$(J}$H$7$F$O0-$/$J$$$H;W$$$^e(B
e$B$9!#e(B! e$B$J$I$,$=$N$^$^$J$N$O4E$$$H;W$$$^$9$,!"8E$$e(B RFC e$B$N1F6Ae(B
e$B$G$7$g$&$M!#:#$@$C$?$ie(B unreserved e$B0J30$r0lN’$Ke(B %-encoding e$B$Ke(B
e$B$7$F$7$^$&$N$,$$$$$G$7$g$&!#e(B

HTML5 e$B$Ne(B 4.10.16.4 URL-encoded form data e$B$r8+$k$H!"e(B
e$B$=$l$K6a$$F0$-$r8@$C$F$$$^$9$M!#e(B
http://www.whatwg.org/specs/web-apps/current-work/#application/x-www-form-urlencoded-encoding-algorithm
SP e$B$re(B + e$B$KCV49$7$F$?$j$O$7$^$9$,!#e(B

e$B$=$&$$$&$o$1$G!"e(BURI e$B%/%i%9$K$O!“e(B& e$B$He(B %26 e$B$r6hJL$7$F;XDj$G$-e(B
e$B$ke(B API e$B$,I,MW$G$9!#$=$&$$$&e(B API e$B$H$7$F!“J8;zNs$Ne(B “&” e$B$He(B
“%26” e$B$r<u$1EO$9$b$N$,;H$o$l$F$$$k$H$$$&$N$,8=>u$G$7$g$&!#e(B
e$B$D$^$j!”%(%9%1!<%W:Q$_$N$b$N$rEO$9!”$H$$$&$3$H$G$9!#e(B

e$BD>@\e(B URI e$B$Ne(B query
e$B$r$$$8$k>l9g$O!"0z?t$O4pK\E*$K%(%9%1!<%W:Q$_e(B
e$B$rMW5a$9$k$3$H$K$J$k$N$G$7$g$&$M!#e(B

e$B$?$H$($P!“e(BURI.escape_component e$B$H$$$&$N$r9M$($F!”%3%s%]!<%Me(B
e$B%s%H$H$7$F%(%9%1!<%W$9$k$H$$$&%a%=%C%I$H$9$k$H!"6h@Z$jJ8;z$Ke(B
e$B$J$j$&$kJ8;z$r$<$s$V%(%9%1!<%W$9$k$3$H$K$J$j$^$9!#e(B
(URI e$B$KF~$l$i$l$J$$J8;z$b%(%9%1!<%W$7$J$$$H$$$1$J$$$N$G!"7ke(B
e$B6Ie(B unreserved e$B0J30$r%(%9%1!<%W$9$k$N$,E,@Z$G$7$g$&$,e(B)

e$B$^$:$3$&$$$&$N$OI,MW$G$7$g$&$M!#e(B

e$B$"$k$$$O!"e(BURI.escape_html_form([[k1, v1], [k2, v2], …]) e$B$He(B
e$B$$$&%a%=%C%I$,!"e(Bapplication/x-www-form-urlencoded e$B$K=>$C$Fe(B
(e$B%(%9%1!<%W$7$Fe(B) k1=v1&k2=v2&… e$B$H$$$&7A<0$r@8@.$9$k%a%=%Ce(B
e$B%I$@$H$9$k$H!"e(Bk, v e$B$NCf$G$O!“e(Bquery e$B$K;H$($J$$J8;z$He(B =,& e$B$re(B
e$B%(%9%1!<%W$9$k$3$H$K$J$j$^$9!#e(B(e$B$”$He(B + e$B$He(B ; e$B$b$+$Je(B)

e$B$3$l$bI,MW$@$H$O;W$&$N$G$9$,!“e(B
e$BL>A0$Oe(B www_form_urlencode e$B$NJ}$,$h$/$”$j$^$;$s$+!#e(B
www_ e$B$O<h$C$F$b$$$$$+$b$7$l$^$;$s$,!#e(B
e$B$"$H!"CM$,e(B String e$B$+e(B String e$B$Ne(B Array e$B$Je(B Hash
e$B$b0z?t$K<h$l$k$H$+!#e(B

e$BB?$/$N>l9ge(B CGI e$BEy$X$N0z?t$Oe(B Hash

e$B$GF@$k$3$H$,$G$-$k$N$G!"e(B

e$B$=$l$r:FEY$3$N%a%=%C%I$KEj$29~$_$?$$!"$H$+e(B

In article [email protected],
“NARUSE, Yui” [email protected] writes:

e$B$h$/$“$kMQK!$G$O!“e(Bprotocol-host-path e$B$”$?$j$^$G$O!“e(B
e$B$$$-$J$jJ8;zNs$H$7$FM/$$$F=P$FMh$F$$$k$h$&$J5$$,$7$^$9!#e(B
e$B:#2s$NOC$O$=$NH]Dj$+$i;O$^$C$F$$$k$N$G$I$&$J$s$G$7$g$&$M!#e(B
e$B$3$NItJ,$K$D$$$F0lDj$N2>Dj$rCV$1$k$J$i$P!”$^$?JL$Ne(BAPIe$B$NM>CO$,$”$j$^$9$,!#e(B

e$B$b$m$O$7$5$s$N$Oe(B URI e$B$r@8@.$9$k$H$$$&OC$8$c$J$$$7$J$!!#e(B

e$B$3$l$K%"%/%;%9$7$h$&$H;W$C$?$j!"e(Ba e$BMWAG$Ne(B href e$BB0@-$K;H$C$?$j$9$k$J$i$Pe(B
URI e$B$NJ}$r;H$&$N$G$7$g$&$,!“e(B
e$B$3$N%”%I%l%9<+BN$rI=<($7$?$$>l9g$Oe(B IRI e$B$NJ}$r;H$&$H$+!#e(B

e$B$J$k$[$I!#e(B

IRI e$B$NOC$r;}$A=P$7$?$N$O<B$O$3$A$i8~$1$G!“e(BURI e$B$C$]$$J8;zNsA4BN$K$+$1$k%(e(B
e$B%9%1!<%W$O!“e(B
e$B4pK\E*$K$Oe(B IRI e$B$+$ie(B URI e$B$X$NJQ49$G$”$k$Y$-$G$O$J$$$N$+!”$H;W$&$h$&$K$J$je(B
e$B$^$7$?!#e(B
RFC 3987 - Internationalized Resource Identifiers (IRIs)
e$B$3$A$i$Oe(B US-ASCII e$B$NHO0O30$7$+$$$8$i$J$$$N$G!“$4;XE&$Ne(B %-encode e$B$N2a>jE,e(B
e$BMQLdBj$,$”$j$^$;$s!#e(B

e$B$=$l$O0-$/$J$$$+$b$7$l$^$;$s$M!#e(B

e$B$^$?!“e(BURL e$B$C$]$$$b$N$re(B URI e$B$KJQ49$9$k<jB3$-$re(B HTML 5 e$B$N?M!9$,9M$($F$$$^$9!#e(B
Web addresses in HTML 5
e$B$3$A$i$O8=>ue(B %-encode e$B$N2a>jE,MQ$NLdBj$,$”$k$N$G!"$=$NE@$O$D$C$D$$$F$_$he(B
e$B$&$+$J$H!#e(B

e$B$U$`!#e(B

In article [email protected],
“NARUSE, Yui” [email protected] writes:

e$B$=$l$r2r$$$A$c$&$H2r$$$?7k2L$,e(B IRI e$B$C$]$$2?$+E*$K$^$:$$!“$H$+!#e(B
encodeURI(”@") e$B$Oe(B “@” e$B$J$N$G!"e(BencodeURI e$B$Oe(B %40
e$B$r@8@.$7$J$$e(B
e$B$s$G$9$h$M$'!#e(B

js> encodeURI(“@”)
@

e$B$@$+$i!“e(B%40 e$B$,$”$k$H$7$?$i!“$=$l$Oe(B encodeURI
e$B0J30$+$iMh$?$be(B
e$B$N$G$”$k$O$:$G$9!#$=$&$9$k$H!"$=$l$O$I$&$$$&>u67$J$N$+$J$!!"e(B
e$B$H$$$&5?Ld$J$s$G$9$,!#e(B

encodeURIComponent e$B$O4pK\E*$J9M$(J}$H$7$F$O0-$/$J$$$H;W$$$^e(B
e$B$9!#e(B! e$B$J$I$,$=$N$^$^$J$N$O4E$$$H;W$$$^$9$,!"8E$$e(B RFC e$B$N1F6Ae(B
e$B$G$7$g$&$M!#:#$@$C$?$ie(B unreserved e$B0J30$r0lN’$Ke(B %-encoding e$B$Ke(B
e$B$7$F$7$^$&$N$,$$$$$G$7$g$&!#e(B

HTML5 e$B$Ne(B 4.10.16.4 URL-encoded form data e$B$r8+$k$H!"e(B
e$B$=$l$K6a$$F0$-$r8@$C$F$$$^$9$M!#e(B
HTML Standard
SP e$B$re(B + e$B$KCV49$7$F$?$j$O$7$^$9$,!#e(B

e$B$3$l$O$3$l$GFf$@$J$!!#e(B
reserved e$B$N$R$H$D$G$“$ke(B * e$B$O$=$N$^$^$K$9$k$N$Ke(B
unreserved e$B$N$R$H$D$G$”$ke(B ~ e$B$Oe(B %7E
e$B$K$9$k$H$$$&M}M3$OM}2r$Ge(B
e$B$-$^$;$s!#e(B

e$B$"$H!"e(BU+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL
LETTER Z representing the hexadecimal value e$B$H$$$&$N$O4V0c$$e(B
e$B$G$7$g$&$J!#e(B16e$B?J$N=*$o$j$Oe(B Z e$B$8$c$J$/$Fe(B F
e$B$G$7$g$&!#e(B

e$B$"$k$$$O!"e(BURI.escape_html_form([[k1, v1], [k2, v2], …]) e$B$He(B
e$B$$$&%a%=%C%I$,!"e(Bapplication/x-www-form-urlencoded e$B$K=>$C$Fe(B
(e$B%(%9%1!<%W$7$Fe(B) k1=v1&k2=v2&… e$B$H$$$&7A<0$r@8@.$9$k%a%=%Ce(B
e$B%I$@$H$9$k$H!"e(Bk, v e$B$NCf$G$O!“e(Bquery e$B$K;H$($J$$J8;z$He(B =,& e$B$re(B
e$B%(%9%1!<%W$9$k$3$H$K$J$j$^$9!#e(B(e$B$”$He(B + e$B$He(B ; e$B$b$+$Je(B)

e$B$3$l$bI,MW$@$H$O;W$&$N$G$9$,!“e(B
e$BL>A0$Oe(B www_form_urlencode e$B$NJ}$,$h$/$”$j$^$;$s$+!#e(B
www_ e$B$O<h$C$F$b$$$$$+$b$7$l$^$;$s$,!#e(B

html e$B$H$$$&8l$rF~$l$?$N$Oe(B URI e$B$N@$3&$+$i8+$k$He(B HTML
e$B$G$J$$e(B
form e$B$b$“$jF@$k!”$H$$$&0U?^$G$9!#e(B(-1)

multipart/form-data e$B$G$J$$$H$$$&0UL#$,I=8=$G$-$F$$$k$N$O$$$$e(B
e$B$G$9$M!#e(B(+1)

e$B$"$H!"e(BURI.form_urlencode e$B$Oe(B URI.escape_html_form
e$B$h$jC;$$$Ne(B
e$B$b$$$$$G$9$M!#e(B(+1)

e$B$G$be(B URI e$B$He(B url e$B$,=E$J$k$N$O%$%d$+$J!#e(B(-1)

(e$B7We(B0)

e$B$"$H!"CM$,e(B String e$B$+e(B String e$B$Ne(B Array e$B$Je(B Hash e$B$b0z?t$K<h$l$k$H$+!#e(B

e$BB?$/$N>l9ge(B CGI e$BEy$X$N0z?t$Oe(B Hash e$B$GF@$k$3$H$,$G$-$k$N$G!"e(B

e$B$=$l$r:FEY$3$N%a%=%C%I$KEj$29~$_$?$$!"$H$+e(B

e$B$=$N$X$s$O$"$$$^$$$K$J$i$J$$HO0O$GJXMx$K<u$1IU$1$l$P$$$$$s$8$ce(B
e$B$J$$$G$7$g$&$+!#e(B

[[k1, v1], [k2, v2], …] e$B$N7A<0$r=q$$$?$N$O$3$l$,$J$s$G$bI=e(B
e$B8=$G$-$k%W%j%_%F%#%V$@$+$i$G!“$=$l0J30$N7A<0$r<u$1IU$1$k$Y$-e(B
e$B$G$J$$$H$$$&0U?^$,$”$k$o$1$G$O$"$j$^$;$s!#e(B

HTML5 e$B$Ne(B 4.10.16.4 URL-encoded form data e$B$r8+$k$H!"e(B
e$B$=$l$K6a$$F0$-$r8@$C$F$$$^$9$M!#e(B
HTML Standard
SP e$B$re(B + e$B$KCV49$7$F$?$j$O$7$^$9$,!#e(B

SPe$B$re(B+e$B$KJQ49$9$k$N$Oe(BMOSAICe$B$+$i;O$^$kM3=o@5$7$$JQ49$G!“$”$j$H$“$i$f$ke(B
e$B%V%i%&%6e(B(*)e$B$,:NMQ$7$F$$$k$s$G$9$,!”$J$<$+e(BURLe$B%(%s%3!<%G%#%s%0$+$i$Oe(B
e$BD9G/O3$l$F$$$?$s$G$9$h$M!#e(B

(*) e$B$A$g$C$H$$$$$9$.$+!#$G$b!"e(BMOSAIC, Netscape,
IEe$B$Oe(BMOSAICe$BM3Mh$Ne(B
+ e$BJQ49%3!<%I$r$b$C$F$?e(B

e$B$G!“F1$8%V%i%&%6Fb$G$b%9%/%j%W%H%(%s%8%s$H$+$O5,3JDL$j$Ke(BencodeURI()e$B$re(B
e$B<BAu$9$k$+$i!”$I$N%5%V%7%9%F%`$,%(%s%3!<%I$9$k2U=j$K$h$C$F7k2L$,e(B
e$BJQ$o$C$F$$$F!“$+$D!”$I$3$K$bJ8=q2=$5$l$F$J$$$7!“%V%i%&%64V$NHs8_49$b$J$$$+$ie(B
Webe$B$G5-;v$b$_$D$+$i$J$$$7$G!”>l9g$K$h$C$F$O$O$^$k%1!<%9$,$"$C$?$H$$$&!&!&e(B

e$B$J$N$G!"8=>uDIG’J}8~$O4?7^$5$l$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B!t;(CL%a!<%k$O$5$/$5$/=q$1$F$$$$$J!<!#$$$$5$@2$i$7e(B :slight_smile:

e$B$(!<$H!"<j85$N%^%7%s$Ge(B js e$B$N<BBN$Oe(B /usr/bin/smjs e$B$G!"e(B
spidermonkey-bin - standalone JavaScript/ECMAScript (ECMA-262) interpreter
e$B$H$$$&$b$N$N$h$&$G$9!#e(B

% js --version
JavaScript-C 1.8.0 pre-release 1 2009-02-16
usage: js [-zKPswWxCi] [-b branchlimit] [-c stackchunksize] [-o option] [-v version] [-f scriptfile] [-e script] [-S maxstacksize] [scriptfile] [scriptarg…]

e$B$"$"!"$=$&$$$($Pe(BECMAScripte$B$N;EMM$G!"e(BuriReserved(*)e$B$@$C$?$ie(B
e$B!s%G%3!<%I$7$J$$$s$@$C$?!#e(B

(*)
ECMAScripte$B$G$NDj5A$O2<5-;2>H!"e(BRFC2396e$BEv;~$H9g$o$;$F$$$k$N$Ge(B
e$B:G6a$Ne(BURIe$B$Ne(BRFCe$B$NDj5A$H$O0c$&$h$&$J5-21$,$,$,e(B

uriReserved ::: one of
; / ? : @ & = + $ ,

e$B$G!“0U?^$J$s$G$9$,!JCm0U!”$3$3$+$i@h$OBg13$r8@$C$F$$$k2DG=@-$,$"$j$^$9!K!"e(B
decodeURIe$B$N7k2L$Ke(BreservedURIe$B$,4^$^$l$F$$$J$$$H!"e(BencodeURI(decodeURI(str))
e$B$7$?$H$-$K!"e(B
e$B%(%s%3!<%I$,$&$^$/$$$/!#$C$F;v$@$C$?$+$H!#e(B

e$B$D$^$j!"%f!<%6F~NO$8$c$J$/$F!“e(Bwikipediae$B$N$h$&$Je(Bi18ne$B$Je(BURIe$B$N%G%3!<%I$re(B
e$B9M$($F$$$k$H$+$8$c$”$j$^$;$s$G$7$?$C$1!)e(B

e$B$G!"e(BHTTP e$B$H$$$&%9%-!<%`$,$5$i$K3Fe(B web application e$B$J$I$K0UL#e(B
e$B$N3d$jEv$F$r0Q>y$7$F$*$j!"0UL#$NIT0BDj$5$KGo<V$r$+$1$F$$$k$He(B
e$B$$$&$N$O$=$&$J$s$G$9$,!#e(B

e$B$J$s$+OC$,9-$,$C$F$7$^$C$?!#e(BURIe$B$H$$$&OHAH$_!“6&DL9`$r$&$@$&$@$d$C$F$$$?e(B
e$B;~$Oe(B i18n e$B$,Bg$-$J%H%T%C%/$NFb$Ge(B
i18ne$BJ8;zNs!!”+"*!!e(BASCIIe$B$Je(BURIe$B!!$He(B
e$B8D!9$N%W%m%H%3%kCN$i$J$/$F$b!“e(Bencode,
decodee$B$G$-$k$C$F$N$OL\I8$H$7$Fe(B
e$B$”$C$?5$$,$9$k!#$H$$$&$@$1$N0U?^$@$C$?$N$G$9$,e(B

e$B$H$$$&$N$Oe(B
“#{CGI.escape k1}=#{CGI.escape v1}&#{CGI.escape k2}=#{CGI.escape v2}”
e$B$KHf$Y$FC;$$$G$9$7!"e(B= e$B$de(B & e$B$H$$$&8D!9$N6h@Z$j$r0U<1$7$J$/$Fe(B
e$B:Q$_$^$9$+$i!#e(B

e$B$^$?!"%(%9%1!<%W:Q$$J$b$N$K$O>/$J$/$H$be(B = e$B$,4^$^$l$^$9$N$G!"e(B
e$B%(%9%1!<%W:Q$
$G$"$k$3$H$,CM$r8+$k$H$J$s$H$J$/$o$+$k$H$$$&$Ne(B
e$B$bMxE@$G$9!#Fs=E%(%9%1!<%W$rKI;_$9$k$H$$$&0UL#$G!#$"$H!“F~NOe(B
e$B$,J8;zNs$8$c$J$/$FG[Ns$G$”$k$H$$$&$N$bF1MM$JMxE@$G$9!#e(B

e$B$J$k$[$I!#F~NO$,e(BStringe$B$@$H!"4V0c$($FO"7k:Q$_J8;zNs$rEO$9?M$,8e$r@d$?$J$$$,!"e(B
e$BG[Ns$J$iD9$5#1$NO"7kJ8;zNs$rEO$9?M$O$^$:=P$J$$$@$m$&!#$H$$$&;v$G$9$M!#e(B
e$BF10U$7$^$9!#e(B

e$B$H$7$F$D$1$H$/$H$$$&$N$O$"$j$&$k$H;W$C$F$$$^$9!#e(B
e$B$J$k$[$Ie(B

In article [email protected],
KOSAKI Motohiro [email protected] writes:

SPe$B$re(B+e$B$KJQ49$9$k$N$Oe(BMOSAICe$B$+$i;O$^$kM3=o@5$7$$JQ49$G!“$”$j$H$“$i$f$ke(B
e$B%V%i%&%6e(B(*)e$B$,:NMQ$7$F$$$k$s$G$9$,!”$J$<$+e(BURLe$B%(%s%3!<%G%#%s%0$+$i$Oe(B
e$BD9G/O3$l$F$$$?$s$G$9$h$M!#e(B

(*) e$B$A$g$C$H$$$$$9$.$+!#$G$b!"e(BMOSAIC, Netscape, IEe$B$Oe(BMOSAICe$BM3Mh$Ne(B
+ e$BJQ49%3!<%I$r$b$C$F$?e(B

SP e$B$re(B + e$B$KJQ49$9$k$N$O@N$+$ie(B HTML e$B$GDj5A$5$l$F$$$^$9!#e(B
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

e$B$3$l$O!"e(BURI e$B$,e(B +
e$B$H$$$&J8;z$N0UL#$r3F%9%-!<%`$KG$$;$F$$$F!"e(B
http e$B$O$=$l$r$5$i$Ke(B web application e$B$d%V%i%&%6$KG$$;$F$$$F!“e(B
HTML e$B$Ge(B form e$B$re(B application/x-www-form-urlencoded e$B$Ge(B
submit
e$B$9$ke(B query e$B$N$H$3$m$K$*$1$ke(B + e$B$Ke(B SP
e$B$H$$$&0UL#$rDj5A$7$?!”$He(B
e$B$$$&$3$H$G$9!#e(B

e$B$G!“F1$8%V%i%&%6Fb$G$b%9%/%j%W%H%(%s%8%s$H$+$O5,3JDL$j$Ke(BencodeURI()e$B$re(B
e$B<BAu$9$k$+$i!”$I$N%5%V%7%9%F%`$,%(%s%3!<%I$9$k2U=j$K$h$C$F7k2L$,e(B
e$BJQ$o$C$F$$$F!“$+$D!”$I$3$K$bJ8=q2=$5$l$F$J$$$7!“%V%i%&%64V$NHs8_49$b$J$$$+$ie(B
Webe$B$G5-;v$b$_$D$+$i$J$$$7$G!”>l9g$K$h$C$F$O$O$^$k%1!<%9$,$"$C$?$H$$$&!&!&e(B

application/x-www-form-urlencoded e$B$8$c$J$$$H$3$m$Ge(B + e$B$r;H$Ce(B
e$B$F$be(B SP e$B$N0UL#$K$O$J$i$J$$$N$G!"$=$N$X$s$K$O$^$C$?$s$8$c$J$$e(B
e$B$G$9$+$M!#e(B

e$B$?$H$($P!"e(B

e$B$O!V%W%i%95-9f$H%^%$%J%95-9f!W$H$$$&5-;v$,=P$F$-$^$9!#e(B

e$B$^$?!"e(BApache e$B$G$b!“6uGr$r4^$`%U%!%$%kL>$r$D$/$C$F%”%/%;%9$7e(B
e$B$F$_$k$H3NG’$G$-$^$9$,!“e(BURL e$B$K6uGre(B (%20) e$B$N$+$o$j$Ke(B +
e$B$r;H$Ce(B
e$B$F$b%”%/%;%9$O$G$-$^$;$s!#e(B

Tanaka A. wrote:

encodeURI(“@”) e$B$Oe(B “@” e$B$J$N$G!"e(BencodeURI e$B$Oe(B %40 e$B$r@8@.$7$J$$e(B
e$B$s$G$9$h$M$'!#e(B

js> encodeURI(“@”)
@

e$B$@$+$i!“e(B%40 e$B$,$”$k$H$7$?$i!“$=$l$Oe(B encodeURI e$B0J30$+$iMh$?$be(B
e$B$N$G$”$k$O$:$G$9!#$=$&$9$k$H!"$=$l$O$I$&$$$&>u67$J$N$+$J$!!"e(B
e$B$H$$$&5?Ld$J$s$G$9$,!#e(B

userinfo e$B$K4^$^$l$k!"%f!<%6L>$d%Q%9%o!<%I$Ke(B @
e$B$,4^$^$l$F$$$?$N$G!"e(B
IRI e$B$C$]$$$b$N$K$5$l$?CJ3,$G%(%9%1!<%W$5$l$?$N$G$O$J$$$G$7$g$&$+!#e(B

reserved e$B$N$R$H$D$G$“$ke(B * e$B$O$=$N$^$^$K$9$k$N$Ke(B
unreserved e$B$N$R$H$D$G$”$ke(B ~ e$B$Oe(B %7E e$B$K$9$k$H$$$&M}M3$OM}2r$Ge(B
e$B$-$^$;$s!#e(B

e$B$"$H!"e(BU+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL
LETTER Z representing the hexadecimal value e$B$H$$$&$N$O4V0c$$e(B
e$B$G$7$g$&$J!#e(B16e$B?J$N=*$o$j$Oe(B Z e$B$8$c$J$/$Fe(B F e$B$G$7$g$&!#e(B

e$B$3$NJU$K4X$7$F$Oe(B(e$BJ9$$$Fe(B|e$B;XE&$7$Fe(B)e$B$_$^$9!#e(B

form e$B$b$“$jF@$k!”$H$$$&0U?^$G$9!#e(B(-1)
application/x-www-form-urlencoded e$B$Oe(B HTML e$B$@$1$G$J$/!"e(B
WSDL e$B$de(B XForms e$B$+$i$b;2>H$5$l!"e(Bcookie
e$B$G$b;~!9MxMQ$5$l$k$N$G!"e(B
HTML e$B$H;XDj$9$k$N$O$A$g$C$H$R$C$+$+$j$^$9!#e(B

e$B$^$?!"e(BHTML
e$B$HIU$1$k$3$H$G2?$+$3$l$N;EMM$r$h$j87L)$K$G$-$k$+$H$$$&$H!"e(B
HTML5 e$B0J30$O5-=R$,>/$J$9$.$k>e$K$=$l$>$l0[$J$k$I$3$m$+!“e(B
HTML 4 e$B$G$Oe(B ASCII e$BJ8;z8BDj$@$C$?$j$9$k$N$G!”$3$l$^$?e(B
HTML e$B$H;XDj$9$k0U5A$O$J$$$h$&$K46$8$^$9!#e(B
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

HTML5 e$B$^$G8BDj$9$k$H!"e(BHTML5 e$B$Ne(B The appropriate form encoding
algorithm
e$B$N$&$A!"e(BURI e$B$KFM$C9~$`$3$H$r0U?^$7$?$b$N$O!"e(B
4.10.16.4 URL-encoded form data e$B$7$+$J$$$N$GFCDj2DG=$G$9$1$l$I!#e(B

On 2009/09/08 13:59, Tanaka A. wrote:

いや、JavaScript です。

% js
js> decodeURI(“%40”)
%40
js> decodeURI(“%41”)
A
js> decodeURI(“%25”)
%

一般の文字 (unreserved, a-zA-Z0-9など) はエスケープしてもしなくても同じ
のはず。したがって %41 → A はいつでも可能です。URI の文法内に意味をなす
文字 (delimiters) はエスケープされたものとエスケープされてないものでは意
味が違いますので、いつでも変換できるとは限られません。たとえば
http://example.com/abc#def と http://example.com/abc%23def ã¯æ ¹æœ¬çš„ã«é•
います。前者では #def は fragment で、後者では abc#def という path (ファ
イルまただディレクトリなど) である。無差別に %23 → # をするのは間違いで
ある。decode でもどの部分を decode するによっていろいろ違ってくる。

以前ちょっと考えたのはその辺を第二の引数で指定できるようなメソッドでし
た。引数には「これだけは decode しないで」、「(delimiter/reserved の内)
これだけは decode して」、「この部分用なので、適当にやってくれ」という三
種類を考えたが、どちらの方がいいのか結論は出してないです。encode の方で
は同様なことが考えられる。ある意味では JavaScript の encodeURI と
encodeURIComponent が、二つ目の引数が与えられる選択肢の幅の両端に当たる
かもしれません。

少し例を挙げますと、

encodeç³»:
‘abc#def’, :path → abc%23def # path 内には # はそのまま使えない
‘abc#def’, :fragment → ‘abc#def’ 又は ‘abc%23def’ # fragment 内では #
も %23 も同様
‘abc#def’, :uri → ‘abc#def’ # URI 全体では # は fragment 前の区切りなの
で、%23 はだめ

それ以上考えるのは今日は残念ながら遅すぎます。

もうひとつ、URI::Generic.build など先ほどみたときに考えた。引数の数がや
ãŸã‚‰å¤šãã€å¤šãã®å ´åˆã€å›ºå®šã®éƒ¨åˆ†ãŒã‹ãªã‚Šã‚ã‚‹ã®ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã—ãŸã€‚ã
ういうことを考えると例えば
URI::Generic.build ‘Google’, query: ‘2+3’
で 2+3 - Google Search を作ってもらえるのでしたら、

URI::Generic.build ‘http’, ‘’, ‘www.google.com’, ‘’, ‘’, ‘search’, ‘’,
‘2+3’, ‘’
よりかなり便利のではないでしょうか。

よろしくお願いします。 Martin.

SP e$B$re(B + e$B$KJQ49$9$k$N$O@N$+$ie(B HTML e$B$GDj5A$5$l$F$$$^$9!#e(B
Forms in HTML documents

e$B$“$”!"K\Ev$@!#$b$&40A4$KK:$l$F$$$^$9$M!#$3$l$G$b0l1~$b$H%V%i%&%620$5$s$J$N$Ke(B
:slight_smile:

On 2009/02/14 20:59, NARUSE, Yui wrote:

$ ruby19 -Ku -ruri -ve ‘p [“日本語”.dump, URI.unescape( URI.escape(“日本語”) ).dump]’
ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-darwin9]
[""\u{65e5}\u{672c}\u{8a9e}"",
“”\u{e6}\u{97}\u{a5}\u{e6}\u{9c}\u{ac}\u{e8}\u{aa}\u{9e}""]
UTF-8æ±ºã‚æ‰“ã¡ã¯ã¾ãšã„ã¨æ€ã„ã¾ã™ãŒã€ã“ã†ã„ã†å ´åˆã£ã¦
default_externalでいいんでしょうか。

escape ã®å ´åˆã€å¼•æ•°ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‹ã‚‰ UTF-8 に変換して、その後バイト
語とに %-encoding するのは筋だと思います。第二引数では UTF-8 意外のエン
コーディングが指定できるといいと思います。default_external はあくまでも
「ここの計算機のプログラムの外のエンコーディングであって、Web に通用する
ものではありません。

unescape ã®å ´åˆã¯ %-encoding を解けた後の想定するエンコーディングと、結
果のエンコーディングの二つを考える必要がある。前者については、バイトパ
ターンが UTF-8 ã«æº–æ‹ ã—ãŸã‚‰ UTF-8、そうでなかったら ASCII-8BIT、別に指定
があったらそのエンコーディング、でいいと思います。このとき、「一部分が
UTF-8 æº–æ‹ ã€ä¸€éƒ¨åˆ†ã¯é•ã†ã€ã®å•é¡ŒãŒã‚ã‚Šã†ã‚‹ã€‚ãã®å ´åˆã€Œå…¨éƒ¨ ASCII-8BIT」
と「UTF-8 のところを unescape、残りを % のまま」の選択肢が考えられる。
後者の「結果のエンコーディング」は前者が ASCII-8BIT ã®å ´åˆ ASCII-8BIT し
かないが、後 default-internal と指定されたエンコーディング (前者と同様又
は違う(1)) が考えられる。

(1) の例: あるサーバで SJIS が使われているので前者には SJIS が必要だけ
ど、プログラム内は EUC-JP に統一されているのは応用例として考えられます。

基本的には引数のエンコーディングがいいのですかねぇ。
で、US-ASCII ã ã£ãŸå ´åˆã¯ UTF-8 で。

Martin さんどう思われますか?

意見が遅くて申し訳ございません。この操作をどのぐらい IRI <-> URI の変更
ã®ãŸã‚ã ã¨è€ƒãˆã‚‰ã‚Œã‚‹ã‹ã¨æ€ã„ã¾ã™ã€‚ãã®å ´åˆã€å…¨ä½“çš„ãªå¤‰æ›ã«ã¯ãƒ¡ã‚½ãƒƒãƒ‰åã¨
して URI.to_IRI とか URI.to_URI/from_IRI (IRI クラスが別に必要でしたら
IRI.to_URI) 等の方がいいのではないかとも思います。しかしその変換はただの
%-encoding よりもう少し複雑、しかも現在検討中です。

よろしくお願いします。 Martin.

In article [email protected],
“NARUSE, Yui” [email protected] writes:

userinfo e$B$K4^$^$l$k!"%f!<%6L>$d%Q%9%o!<%I$Ke(B @ e$B$,4^$^$l$F$$$?$N$G!"e(B
IRI e$B$C$]$$$b$N$K$5$l$?CJ3,$G%(%9%1!<%W$5$l$?$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$=$&$d$C$F$G$-$?e(B %40 e$B$Oe(B decodeURI(“%40”) e$B$Ge(B @
e$B$KLa$i$J$$$s$Ge(B
e$B$9$,!"$=$l$G$$$$$s$G$7$g$&$+!#e(B

application/x-www-form-urlencoded e$B$Oe(B HTML e$B$@$1$G$J$/!"e(B
WSDL e$B$de(B XForms e$B$+$i$b;2>H$5$l!"e(Bcookie e$B$G$b;~!9MxMQ$5$l$k$N$G!"e(B
HTML e$B$H;XDj$9$k$N$O$A$g$C$H$R$C$+$+$j$^$9!#e(B

HTML e$B$GDj5A$7$?!"$H$$$&0UL#9g$$$N$D$b$j$G$9!#e(B

e$B$G$b!"$R$C$+$+$k$J$ie(B www e$B$H$$$&$N$b$$$$$+$bCN$l$^$;$s$M!#e(B
URI.escape_www_form e$B$H$+!#$=$&$9$k$He(B 1e$BJ8;zC;$/$J$j$^$9$7!#e(B

2009/09/09 20:11, “Martin J. Dürst” wrote:

一般の文字 (unreserved, a-zA-Z0-9など) はエスケープしてもしなくても同じ
のはず。したがって %41 → A はいつでも可能です。

これらは入力に含まれる % が既にエスケープ済みであることを
前提としています。つまり、"%41" ã¨ã„ã†æ–‡å­—åˆ—ã‚’è¡¨ã—ãŸã„å ´åˆã¯ã€
“%2541” という形で渡ってきているという了解が置かれています。

以前ちょっと考えたのはその辺を第二の引数で指定できるようなメソッドでし
た。引数には「これだけは decode しないで」、「(delimiter/reserved の内)
これだけは decode して」、「この部分用なので、適当にやってくれ」という三
種類を考えたが、どちらの方がいいのか結論は出してないです。

URI.escape(str, pattern) がそれですね。
obsolete にしちゃいましたけど。
実際問題、そんなところまで考えないといけないのって、
不健全だと思うんですよね。

もうひとつ、URI::Generic.build など先ほどみたときに考えた。引数の数がや
ãŸã‚‰å¤šãã€å¤šãã®å ´åˆã€å›ºå®šã®éƒ¨åˆ†ãŒã‹ãªã‚Šã‚ã‚‹ã®ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã—ãŸã€‚ã
ういうことを考えると例えば
URI::Generic.build ‘Google’, query: ‘2+3’
で 2+3 - Google Search を作ってもらえるのでしたら、

URI::Generic.build ‘http’, ‘’, ‘www.google.com’, ‘’, ‘’, ‘search’, ‘’,
‘2+3’, ‘’
よりかなり便利のではないでしょうか。

URI(str, hash) とか、uri.add_query(hash) とかがあったらいいかなぁと、
今は考えています。細かいところはもうちょっと検討しますが。

[先日のメールの一部修正]

On 2009/09/09 20:11, Martin J. Dürst wrote:

ちょっとついていけなかったので保留。
%
以前ちょっと考えたのはその辺を第二の引数で指定できるようなメソッドでし
‘abc#def’, :path -> abc%23def # path 内には # はそのまま使えない
‘abc#def’, :fragment -> ‘abc#def’ 又は ‘abc%23def’ # fragment 内では #
も %23 も同様

ここで ‘abc#def’ は間違いです。‘abc%23def’ だけが正しいです。なぜなら、
fragment に # が許されてないです。なぜかというと fragment を抽出するため
に後ろから # を探している実装が昔から一部あるのだそうです。

大変失礼しました。 よろしくお願いします。 Martin.

In article [email protected],
“Martin J. De.AeN|rst” [email protected] writes:

e$B0lHL$NJ8;ze(B (unreserved, a-zA-Z0-9e$B$J$Ie(B) e$B$O%(%9%1!<%W$7$F$b$7$J$/$F$bF1$8e(B
e$B$N$O$:!#$7$?$,$C$Fe(B %41 → A e$B$O$$$D$G$b2DG=$G$9!#e(BURI e$B$NJ8K!Fb$K0UL#$r$J$9e(B
e$BJ8;ze(B (delimiters) e$B$O%(%9%1!<%W$5$l$?$b$N$H%(%9%1!<%W$5$l$F$J$$$b$N$G$O0Ue(B
e$BL#$,0c$$$^$9$N$G!“$$$D$G$bJQ49$G$-$k$H$O8B$i$l$^$;$s!#$?$H$($Pe(B
http://example.com/abc#def e$B$He(B http://example.com/abc%23def e$B$O:,K\E*$K0ce(B
e$B$$$^$9!#A0<T$G$Oe(B #def e$B$Oe(B fragment e$B$G!“8e<T$G$Oe(B abc#def e$B$H$$$&e(B path (e$B%U%!e(B
e$B%$%k$^$?$@%G%#%l%/%H%j$J$Ie(B) e$B$G$”$k!#L5:9JL$Ke(B %23 → # e$B$r$9$k$N$O4V0c$$$Ge(B
e$B$”$k!#e(Bdecode e$B$G$b$I$NItJ,$re(B decode e$B$9$k$K$h$C$F$$$m$$$m0c$C$F$/$k!#e(B

e$B$=$Ne(B decode e$B$N0c$$$K$h$C$F!"$I$3$+$NItJ,$G$Oe(B decodeURI
e$B$,Lre(B
e$B$KN)$D$H$$$&$3$H$G$7$g$&$+e(B?

%25 e$B$re(B % e$B$K$7$F!"$+$D!"e(B%40 e$B$re(B %40
e$B$N$^$^$K$9$k$H$$$&e(B
decodeURI e$B$,$I$&$$$&>u67$G;H$&$N$+$H$$$&OC$J$s$G$9$,!"e(B
e$B6qBNE*$K$O$I$NItJ,$Ge(B decodeURI e$B$,Lr$KN)$D$s$G$7$g$&e(B?

‘abc#def’, :fragment → ‘abc#def’ e$BKt$Oe(B ‘abc%23def’ # fragment e$BFb$G$Oe(B #
e$B$be(B %23 e$B$bF1MMe(B

e$B$=$N9M$(J}$K$O;?@.$J$N$G$9$,!";DG0$J$3$H$Ke(B RFC 3986 e$B$G$Oe(B
fragment e$B$K$Oe(B # e$B$OF~$l$i$l$^$;$s!#e(B

  fragment    = *( pchar / "/" / "?" )

  pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

  sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

e$BJQ$o$C$?$j$7$?$s$G$7$g$&$+e(B?

e$BJQ$($k$J$i!"e(B

  fragment    = *( pchar / "/" / "?" / "#" )

e$B$H$9$k$N$G$7$g$&$,!#e(B

e$B$=$&$$$($P!“e(B”#" e$B$@$1$8$c$J$/$Fe(B “[” e$B$He(B “]”
e$B$bF~$l$?$[$&$,$$$$e(B
e$B$+$b$7$l$^$;$s$M!#e(Bfragment e$B$KF~$l$F$b6h@Z$j$r4V0c$($k$3$H$Oe(B
e$B$J$$$N$G!#e(Bfragment e$B$@$1$8$c$J$/$Fe(B query
e$B$H$+B>$K$bF~$l$i$l$ke(B
e$B$H;W$$$^$9$,!#e(B

‘abc#def’, :uri → ‘abc#def’ # URI e$BA4BN$G$Oe(B # e$B$Oe(B fragment e$BA0$N6h@Z$j$J$Ne(B
e$B$G!"e(B%23 e$B$O$@$ae(B

RFC 3986 e$B$Ne(B URI e$B$Oe(B fragment
e$B$^$G4^$_$^$9$N$G!“LdBj$”$j$^$;$s!#e(B
e$B$b$A$m$s!"e(Bdef e$B$Oe(B fragment e$B$N0UL#$K$J$j$^$9$,!#e(B

  URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

e$B$^$!!“$3$N>l9g$Oe(B scheme e$B$,$J$$$N$GAjBP;2>H$K$J$j$^$9$,!”$=$le(B
e$B$G$be(B fragment e$B$,F~$k$3$H$K$O0c$$$"$j$^$;$s!#e(B

  relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

e$B$b$7$+$7$F!"e(BRFC 2396 e$B$G$NOC$G$9$+e(B?

2009/09/09 3:29, Tanaka A. wrote:

In article[email protected],
"NARUSE, Yui"[email protected] writes:

e$B$h$/$“$kMQK!$G$O!“e(Bprotocol-host-path e$B$”$?$j$^$G$O!“e(B
e$B$$$-$J$jJ8;zNs$H$7$FM/$$$F=P$FMh$F$$$k$h$&$J5$$,$7$^$9!#e(B
e$B:#2s$NOC$O$=$NH]Dj$+$i;O$^$C$F$$$k$N$G$I$&$J$s$G$7$g$&$M!#e(B
e$B$3$NItJ,$K$D$$$F0lDj$N2>Dj$rCV$1$k$J$i$P!”$^$?JL$Ne(BAPIe$B$NM>CO$,$”$j$^$9$,!#e(B

e$B$b$m$O$7$5$s$N$Oe(B URI e$B$r@8@.$9$k$H$$$&OC$8$c$J$$$7$J$!!#e(B

e$B$b$m$O$7$5$s$N$Oe(B encodeURIComponent e$B$+e(B escape_www_form
e$B$G$7$g$&$M!#e(B

e$B$^$?!“e(BURL e$B$C$]$$$b$N$re(B URI e$B$KJQ49$9$k<jB3$-$re(B HTML 5 e$B$N?M!9$,9M$($F$$$^$9!#e(B
Web addresses in HTML 5
e$B$3$A$i$O8=>ue(B %-encode e$B$N2a>jE,MQ$NLdBj$,$”$k$N$G!"$=$NE@$O$D$C$D$$$F$_$he(B
e$B$&$+$J$H!#e(B

e$B$U$`!#e(B

http://lists.w3.org/Archives/Public/public-iri/2009Sep/0018.html
e$BJ9$$$F$_$?$H$3$m!"e(BMartin e$B$5$s<j$,$1$ke(B IRI e$B2~D{$Ke(B
e$B%^!<%8$5$l$?$H$N$3$H$G$7$?!#e(B

2009/09/09 19:51, NARUSE, Yui wrote:

e$B$3$NJU$K4X$7$F$Oe(B(e$BJ9$$$Fe(B|e$B;XE&$7$Fe(B)e$B$_$^$9!#e(B

e$BJ9$$$F$_$?$H$3$m!“4{B8$N%V%i%&%6e(B (Firefox/WebKit)
e$B$K$”$o$;$?$h$&$G$9!#e(B
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-September/022806.html

In article [email protected],
“NARUSE, Yui” [email protected] writes:

decodeURIComponent (e$B$^$?$O$=$l$KN`$9$k$b$Ne(B) e$B$rE,MQ$7$F!"e(B
e$BLa$9$3$H$K$J$k$N$G$7$g$&!#e(B

e$B6X;$5$l$F$$$k$J$i$b$H$b$HB8:$7$J$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B!Ve(BIRI e$B$C$]$$$b$N!W$NDj5A$,$O$C$-$j$7$J$$$N$G4*0c$$$7$F$$$k$+e(B
e$B$b$7$l$^$;$s$,!#e(B

e$B5$$K$J$C$?$@$1$J$N$G$9$,!“$3$3$Ge(B encode e$B$G$O$J$/e(B escape e$B$re(B
e$B;H$C$F$$$k$N$O2?$+0U?^$,$”$C$F$N$3$H$G$9$+!)e(B

CGI.escape e$B$H$+$N1F6A$G$9$+$M$'!#e(B

API e$B$H$7$F$O!“e(BURI.escape e$B$He(B URI.encode
e$B$,F1$8$b$N$J$N$G!”$=e(B
e$B$l$K$"$o$;$FN>J}Dj5A$9$k$b$N$@$H;W$C$F$$$^$7$?$,!#e(B

2009/09/10 18:16, Tanaka A. wrote:

In article[email protected],
"NARUSE, Yui"[email protected] writes:

userinfo e$B$K4^$^$l$k!"%f!<%6L>$d%Q%9%o!<%I$Ke(B @ e$B$,4^$^$l$F$$$?$N$G!"e(B
IRI e$B$C$]$$$b$N$K$5$l$?CJ3,$G%(%9%1!<%W$5$l$?$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$=$&$d$C$F$G$-$?e(B %40 e$B$Oe(B decodeURI(“%40”) e$B$Ge(B @ e$B$KLa$i$J$$$s$Ge(B
e$B$9$,!"$=$l$G$$$$$s$G$7$g$&$+!#e(B

URI e$B$re(B decode e$B$7$F$b!"$=$Ne(B decode e$B7k2L$Oe(B IRI
e$B$C$]$$$b$N$J$N$G!"e(B
e$B$=$N%k!<%k$G6X;_$5$l$F$$$kJ8;ze(B (@ e$B$O$=$3$K4^$^$l$k$i$7$$e(B)
e$B$Oe(B
e$BLa$9$3$H$O$G$-$J$$$h$&$K;W$$$^$9!#e(B
e$B$D$^$j!"e(BURI e$B$rJ,3d$7$Fe(B component e$B$K$7$F$+$i!"e(B
decodeURIComponent (e$B$^$?$O$=$l$KN`$9$k$b$Ne(B) e$B$rE,MQ$7$F!"e(B
e$BLa$9$3$H$K$J$k$N$G$7$g$&!#e(B

e$B$^$!!“e(B%25 e$B$re(B %
e$B$K$7$F$7$^$&$”$?$j!"<:GT$7$?;EMM$K8+$($^$9$,!#e(B

application/x-www-form-urlencoded e$B$Oe(B HTML e$B$@$1$G$J$/!"e(B
WSDL e$B$de(B XForms e$B$+$i$b;2>H$5$l!"e(Bcookie e$B$G$b;~!9MxMQ$5$l$k$N$G!"e(B
HTML e$B$H;XDj$9$k$N$O$A$g$C$H$R$C$+$+$j$^$9!#e(B

HTML e$B$GDj5A$7$?!"$H$$$&0UL#9g$$$N$D$b$j$G$9!#e(B

e$B$G$b!"$R$C$+$+$k$J$ie(B www e$B$H$$$&$N$b$$$$$+$bCN$l$^$;$s$M!#e(B
URI.escape_www_form e$B$H$+!#$=$&$9$k$He(B 1e$BJ8;zC;$/$J$j$^$9$7!#e(B

e$B$$$$$h$&$K;W$$$^$9!#e(B

e$B5$$K$J$C$?$@$1$J$N$G$9$,!“$3$3$Ge(B encode e$B$G$O$J$/e(B escape
e$B$re(B
e$B;H$C$F$$$k$N$O2?$+0U?^$,$”$C$F$N$3$H$G$9$+!)e(B