@@ -422,8 +422,8 @@ def self._decode_uri_component(regexp, str, enc)
422
422
# The returned string is formed using method URI.encode_www_form_component,
423
423
# which converts certain characters:
424
424
#
425
- # URI.encode_www_form('f#o': '/', 'b-r': '$')
426
- # # => "f%23o=%2F&b-r=%24"
425
+ # URI.encode_www_form('f#o': '/', 'b-r': '$', 'b z': '@' )
426
+ # # => "f%23o=%2F&b-r=%24&b+z=%40 "
427
427
#
428
428
# When +enum+ is Array-like, each element +ele+ is converted to a field:
429
429
#
@@ -518,22 +518,39 @@ def self.encode_www_form(enum, enc=nil)
518
518
end . join ( '&' )
519
519
end
520
520
521
- # Decodes URL-encoded form data from given +str+.
521
+ # Returns name/value pairs derived from the given string +str+,
522
+ # which must be an ASCII string.
522
523
#
523
- # This decodes application/x-www-form-urlencoded data
524
- # and returns an array of key-value arrays .
524
+ # The method may be used to decode the body of Net::HTTPResponse object +res+
525
+ # for which <tt>res['Content-Type']</tt> is <tt>'application/x-www-form-urlencoded'</tt> .
525
526
#
526
- # This refers http://url.spec.whatwg.org/#concept-urlencoded-parser,
527
- # so this supports only &-separator, and doesn't support ;-separator.
527
+ # The returned data is an array of 2-element subarrays;
528
+ # each subarray is a name/value pair (both are strings).
529
+ # Each returned string has encoding +enc+,
530
+ # and has had invalid characters removed via
531
+ # {String#scrub}[https://docs.ruby-lang.org/en/master/String.html#method-i-scrub].
528
532
#
529
- # ary = URI.decode_www_form("a=1&a=2&b=3")
530
- # ary #=> [['a', '1'], ['a', '2'], ['b', '3']]
531
- # ary.assoc('a').last #=> '1'
532
- # ary.assoc('b').last #=> '3'
533
- # ary.rassoc('a').last #=> '2'
534
- # Hash[ary] #=> {"a"=>"2", "b"=>"3"}
533
+ # A simple example:
534
+ #
535
+ # URI.decode_www_form('foo=0&bar=1&baz')
536
+ # # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
537
+ #
538
+ # The returned strings have certain conversions,
539
+ # similar to those performed in URI.decode_www_form_component:
540
+ #
541
+ # URI.decode_www_form('f%23o=%2F&b-r=%24&b+z=%40')
542
+ # # => [["f#o", "/"], ["b-r", "$"], ["b z", "@"]]
543
+ #
544
+ # The given string may contain consecutive separators:
545
+ #
546
+ # URI.decode_www_form('foo=0&&bar=1&&baz=2')
547
+ # # => [["foo", "0"], ["", ""], ["bar", "1"], ["", ""], ["baz", "2"]]
548
+ #
549
+ # A different separator may be specified:
550
+ #
551
+ # URI.decode_www_form('foo=0--bar=1--baz', separator: '--')
552
+ # # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
535
553
#
536
- # See URI.decode_www_form_component, URI.encode_www_form.
537
554
def self . decode_www_form ( str , enc = Encoding ::UTF_8 , separator : '&' , use__charset_ : false , isindex : false )
538
555
raise ArgumentError , "the input of #{ self . name } .#{ __method__ } must be ASCII only string" unless str . ascii_only?
539
556
ary = [ ]
0 commit comments