64 lines
1.8 KiB
Ruby
64 lines
1.8 KiB
Ruby
require 'cgi'
|
|
|
|
class CGI
|
|
|
|
# Extends `#escape_html` to support escape modes. By default all strings
|
|
# are escaped on `&`, `>` and `<`. Add the `:nonstandard` mode to omit
|
|
# this conversion.
|
|
#
|
|
# If no mode is given then the `:default` mode is used.
|
|
#
|
|
# Available modes include:
|
|
# * `:quote` - escapes single and double quotes
|
|
# * `:newlines` - escapes newline characters (\r and \n)
|
|
# * `:ampersand` - escapes the ampersand sign
|
|
# * `:brackets` - escapes less-than and greater-than signs
|
|
# * `:default` - escapes double quotes
|
|
#
|
|
# @example
|
|
# escape_html("<tag>") #=> "<tag>"
|
|
# escape_html("Example\nString", :newlines) #=> "Example String"
|
|
# escape_html("\"QUOTE\"", false) #=> "\"QUOTE\""
|
|
#
|
|
def self.escape_html(string, *modes)
|
|
modes << :defualt if modes.empty?
|
|
|
|
unless modes.include?(:nonstandard)
|
|
string = string.gsub(/&/, '&').gsub(/>/, '>').gsub(/</, '<')
|
|
end
|
|
|
|
modes.each do |mode|
|
|
string = \
|
|
case mode
|
|
when :quote, :quotes
|
|
string.gsub(%r|"|,'"').gsub(%r|'|,''')
|
|
when :newlines, :newlines
|
|
string.gsub(/[\r\n]+/,' ')
|
|
when :ampersand
|
|
string.gsub(/&/, '&')
|
|
when :bracket, :brackets
|
|
string.gsub(/>/, '>').gsub(/</, '<')
|
|
when :default, true
|
|
string.gsub(/\"/, '"')
|
|
when false
|
|
else
|
|
raise ArgumentError, "unrecognized HTML escape mode -- #{node}"
|
|
end
|
|
end
|
|
end
|
|
|
|
class << self
|
|
# @deprecated
|
|
alias :escapeHTML :escape_html
|
|
end
|
|
|
|
if RUBY_VERSION < '1.9'
|
|
class << self
|
|
alias :unescape_html :unescapeHTML
|
|
alias :escape_element :escapeElement
|
|
alias :unescape_element :unescapeElement
|
|
end
|
|
end
|
|
|
|
end
|