# URI.decode\_www\_form("?a=b")

**URL:** <https://www.ruby-forum.com/t/uri-decode-www-form-a-b/186596>\
**Category:** Development\
**Created:** [April 9, 2010, 11:29am UTC](https://www.ruby-forum.com/t/uri-decode-www-form-a-b/186596 "2010-04-09T11:29:56Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [April 9, 2010, 11:29am UTC](https://www.ruby-forum.com/t/uri-decode-www-form-a-b/186596/1 "2010-04-09T11:29:56Z")

</div>

URI.decode\_www\_form e$B$O!“0z?t$N@hF,$K$”$ke(B ? e$B$rL5;k$7$^$9!#e(B

% ./ruby -ruri -ve ‘p URI.decode\_www\_form("?a=b")’  
ruby 1.9.2dev (2010-04-08 trunk 27262) [i686-linux]  
[[“a”, “b”]]  
% ./ruby -ruri -ve ‘p URI.decode\_www\_form(“a=b”)’  
ruby 1.9.2dev (2010-04-08 trunk 27262) [i686-linux]  
[[“a”, “b”]]

e$B0U?^$OJ,$+$k$s$G$9$,!";DG0$J$3$H$K!"e(BURI e$B$Ne(B query e$B$K$Oe(B  
? e$B$H$$$&J8;z$re(B  
e$BF~$l$i$l$^$9!#e(B

RFC 3986:

```
  query = *( pchar / "/" / "?" )

```

e$B$=$N$?$a!“e(B? e$B$G;O$^$ke(B key  
e$B$b$A$c$s$H07$&$K$O$I$&$9$k$N$+L@NF$G$O$”$j$^$;$s!#e(B  
e$B$3$3$Oe(B ?  
e$B$NFCJL07$$$r$"$-$i$a$?$[$&$,$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$"$H!"$=$Ne(B

```
unless /\A\??(?<query>[^=;&]*=[^;&]*(?:[;&][^=;&]*=[^;&]*)*)\z/ =~ 

```

str

e$B$H$$$&$H$3$m$G!"e(B[^;&]\* e$B$H$$$&%Q%?!\<%s$,;H$o$l$F$$$F!“e(B  
e$B@5$7$$e(B application/x-www-form-urlencoded  
e$B$G$”$k$3$H$r8!::$7$F$$$^$;$s!#e(B  
e$B$A$c$s$H8!::$7$?$[$&$,$$$$5$$,$9$k$s$G$9$,$I$&$G$7$g$&$+!#e(B

% ./ruby -ruri -e ‘p URI.decode\_www\_form("%=%")’  
[["%", “%”]]

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [April 11, 2010, 12:12am UTC](https://www.ruby-forum.com/t/uri-decode-www-form-a-b/186596/2 "2010-04-11T00:12:15Z")

</div>

(2010/04/09 18:29), Tanaka A. wrote:

> e$BF~$l$i$l$^$9!#e(B
> 
> RFC 3986:
> 
> ```
> query = *( pchar / "/" / "?" )
> 
> ```
> 
> e$B$=$N$?$a!“e(B? e$B$G;O$^$ke(B key e$B$b$A$c$s$H07$&$K$O$I$&$9$k$N$+L@NF$G$O$”$j$^$;$s!#e(B  
> e$B$3$3$Oe(B ? e$B$NFCJL07$$$r$"$-$i$a$?$[$&$,$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$I$3$+$Ge(B form data e$B$Ne(B POST e$B;~$Ke(B ?  
e$B$r4^$a$F$7$^$&\<BAu$,$"$k$H$+8+$?$h$&$Je(B  
e$B5-21$,$"$k$s$G$9$,!“8+$D$+$i$J$$$N$G!”$=$&$7$^$7$g$&$+!#e(B

> e$B$"$H!"$=$Ne(B
> 
> ```
> unless /\A\??(?<query>[^=;&]*=[^;&]*(?:[;&][^=;&]*=[^;&]*)*)\z/ =~ str
> 
> ```
> 
> e$B$H$$$&$H$3$m$G!"e(B[^;&]\* e$B$H$$$&%Q%?!\<%s$,;H$o$l$F$$$F!“e(B  
> e$B@5$7$$e(B application/x-www-form-urlencoded e$B$G$”$k$3$H$r8!::$7$F$$$^$;$s!#e(B  
> e$B$A$c$s$H8!::$7$?$[$&$,$$$$5$$,$9$k$s$G$9$,$I$&$G$7$g$&$+!#e(B
> 
> % ./ruby -ruri -e ‘p URI.decode\_www\_form("%=%")’  
> [["%", “%”]]

e$B!V@5$7$$e(B  
application/x-www-form-urlencodede$B!W$,$I$NDxEY$NHO0O$^$G$J$N$+$,e(B  
e$B$A$g$C$H$h$/$o$+$i$J$$$N$G$9$,!"$3$s$J46$8$G$9$+$M$’!#e(B

WFKV\_ = ‘(?:%\h\h|[^%#=;&]+)’ # :nodoc:  
def self.decode\_www\_form(str, enc=Encoding::UTF\_8)  
return [] if str.empty?  
unless /\A#{WFKV\_}_=#{WFKV\_}_(?:[;&]#{WFKV\_}_=#{WFKV\_}_)\*\z/o =~ str
