2019-03-05   ruby   web   escape   encode   cgi   uri 

CGI.escapeHTMLとCGI.escapeとURI.encodeを比べる

結論

CGI.escapeHTML('< > &') #=> &lt; &gt; &amp;
CGI.escape('< > &')     #=> %3C+%3E+%26
URI.encode('< > &')     #=> %3C%20%3E%20&

CGI.escapeHTML('https://example.com/')  #=> https://example.com/
CGI.escape('https://example.com/')      #=> https%3A%2F%2Fexample.com%2F
URI.encode('https://example.com/')      #=> https://example.com/

CGI.escapeHTML('結')   #=> 結
CGI.escape('結')       #=> %E7%B5%90
URI.encode('結')       #=> %E7%B5%90

コード

#! /usr/bin/env ruby

require "cgi"
require "uri"

def doit(f, s)
  print "#{f}('#{s}')\t#=> "
  puts eval "#{f}('#{s}')"
end

[ "< > &", "https://example.com/", "結"].each do |s|
  [ 'CGI.escapeHTML', 'CGI.escape', 'URI.encode' ].each do |f|
    doit(f, s)
  end
  puts
end

参照

https://gist.github.com/hyuki/bbb72982e4257f86c48b85d7278f342c

 2019-03-05   ruby   web   escape   encode   cgi   uri