mirror of
https://github.com/ruby/ruby.git
synced 2025-09-21 03:24:00 +02:00
Merge CGI-0.3.5
This commit is contained in:
parent
14704023ec
commit
16ea221329
9 changed files with 455 additions and 189 deletions
|
@ -5,24 +5,57 @@ class CGI
|
|||
extend Util
|
||||
end
|
||||
module CGI::Util
|
||||
@@accept_charset="UTF-8" unless defined?(@@accept_charset)
|
||||
# URL-encode a string.
|
||||
@@accept_charset = Encoding::UTF_8 unless defined?(@@accept_charset)
|
||||
|
||||
# URL-encode a string into application/x-www-form-urlencoded.
|
||||
# Space characters (+" "+) are encoded with plus signs (+"+"+)
|
||||
# url_encoded_string = CGI.escape("'Stop!' said Fred")
|
||||
# # => "%27Stop%21%27+said+Fred"
|
||||
def escape(string)
|
||||
encoding = string.encoding
|
||||
string.b.gsub(/([^ a-zA-Z0-9_.\-~]+)/) do |m|
|
||||
buffer = string.b
|
||||
buffer.gsub!(/([^ a-zA-Z0-9_.\-~]+)/) do |m|
|
||||
'%' + m.unpack('H2' * m.bytesize).join('%').upcase
|
||||
end.tr(' ', '+').force_encoding(encoding)
|
||||
end
|
||||
buffer.tr!(' ', '+')
|
||||
buffer.force_encoding(encoding)
|
||||
end
|
||||
|
||||
# URL-decode a string with encoding(optional).
|
||||
# URL-decode an application/x-www-form-urlencoded string with encoding(optional).
|
||||
# string = CGI.unescape("%27Stop%21%27+said+Fred")
|
||||
# # => "'Stop!' said Fred"
|
||||
def unescape(string,encoding=@@accept_charset)
|
||||
str=string.tr('+', ' ').b.gsub(/((?:%[0-9a-fA-F]{2})+)/) do |m|
|
||||
def unescape(string, encoding = @@accept_charset)
|
||||
str = string.tr('+', ' ')
|
||||
str = str.b
|
||||
str.gsub!(/((?:%[0-9a-fA-F]{2})+)/) do |m|
|
||||
[m.delete('%')].pack('H*')
|
||||
end.force_encoding(encoding)
|
||||
end
|
||||
str.force_encoding(encoding)
|
||||
str.valid_encoding? ? str : str.force_encoding(string.encoding)
|
||||
end
|
||||
|
||||
# URL-encode a string following RFC 3986
|
||||
# Space characters (+" "+) are encoded with (+"%20"+)
|
||||
# url_encoded_string = CGI.escape("'Stop!' said Fred")
|
||||
# # => "%27Stop%21%27%20said%20Fred"
|
||||
def escapeURIComponent(string)
|
||||
encoding = string.encoding
|
||||
buffer = string.b
|
||||
buffer.gsub!(/([^a-zA-Z0-9_.\-~]+)/) do |m|
|
||||
'%' + m.unpack('H2' * m.bytesize).join('%').upcase
|
||||
end
|
||||
buffer.force_encoding(encoding)
|
||||
end
|
||||
|
||||
# URL-decode a string following RFC 3986 with encoding(optional).
|
||||
# string = CGI.unescape("%27Stop%21%27+said%20Fred")
|
||||
# # => "'Stop!'+said Fred"
|
||||
def unescapeURIComponent(string, encoding = @@accept_charset)
|
||||
str = string.b
|
||||
str.gsub!(/((?:%[0-9a-fA-F]{2})+)/) do |m|
|
||||
[m.delete('%')].pack('H*')
|
||||
end
|
||||
str.force_encoding(encoding)
|
||||
str.valid_encoding? ? str : str.force_encoding(string.encoding)
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue