aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb
blob: d3c3575748eeca2a2e28d0491136943c09bab3e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require 'cgi'

class CGI #:nodoc:
  if RUBY_VERSION >= '1.9'
    def self.escape_skipping_slashes(str)
      str = str.join('/') if str.respond_to? :join
      str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
        "%#{$1.unpack('H2' * $1.bytesize).join('%').upcase}"
      end.tr(' ', '+')
    end
  else
    def self.escape_skipping_slashes(str)
      str = str.join('/') if str.respond_to? :join
      str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
        "%#{$1.unpack('H2').first.upcase}"
      end.tr(' ', '+')
    end
  end
end