module URI
Missing URI
module class features
Constants
- TBLDECWWWCOMP_
- TBLENCWWWCOMP_
Public Class Methods
decode_www_form_component(str, enc=Encoding::UTF_8)
click to toggle source
Decodes given str
of URL-encoded form data.
This decodes + to SP.
See URI.encode_www_form_component
, URI.decode_www_form.
# File lib/uri.rb, line 54 def self.decode_www_form_component(str, enc=Encoding::UTF_8) raise ArgumentError, "invalid %-encoding (#{str})" if /%(?![0-9a-fA-F][0-9a-fA-F])/ =~ str str.b.gsub(/\+|%[0-9a-fA-F][0-9a-fA-F]/, TBLDECWWWCOMP_).force_encoding(enc) end
encode_www_form_component(str, enc=nil)
click to toggle source
Encodes given str
to URL-encoded form data.
This method doesn't convert *, -, ., 0-9, A-Z, _, a-z, but does convert SP (ASCII space) to + and converts others to %XX.
If enc
is given, convert str
to the encoding before percent encoding.
This is an implementation of www.w3.org/TR/2013/CR-html5-20130806/forms.html#url-encoded-form-data.
See URI.decode_www_form_component
, URI.encode_www_form.
# File lib/uri.rb, line 36 def self.encode_www_form_component(str, enc=nil) str = str.to_s.dup if str.encoding != Encoding::ASCII_8BIT if enc && enc != Encoding::ASCII_8BIT str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace) str.encode!(enc, fallback: ->(x){"&##{x.ord};"}) end str.force_encoding(Encoding::ASCII_8BIT) end str = str.gsub(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_) str.force_encoding(Encoding::US_ASCII) end