[前][次][番号順一覧][スレッド一覧]

ruby-changes:24372

From: xibbar <ko1@a...>
Date: Wed, 18 Jul 2012 08:05:14 +0900 (JST)
Subject: [ruby-changes:24372] xibbar:r36422 (trunk): * lib/cgi/util.rb (CGI.escapeHTML,unescapeHTML): Add &apos; for HTML5 escaping.

xibbar	2012-07-18 08:04:46 +0900 (Wed, 18 Jul 2012)

  New Revision: 36422

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36422

  Log:
    * lib/cgi/util.rb (CGI.escapeHTML,unescapeHTML): Add &apos; for HTML5 escaping.
        [Feature #6620]

  Modified files:
    trunk/ChangeLog
    trunk/lib/cgi/util.rb
    trunk/test/cgi/test_cgi_util.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36421)
+++ ChangeLog	(revision 36422)
@@ -1,3 +1,8 @@
+Wed Jul 18 07:59:29 2012  Takeyuki FUJIOKA  <xibbar@r...>
+
+	* lib/cgi/util.rb (CGI.escapeHTML,unescapeHTML): Add &apos; for HTML5 escaping.
+	[Feature #6620]
+
 Tue Jul 17 22:17:13 2012  Tanaka Akira  <akr@f...>
 
 	* lib/open-uri.rb: call io.close! for Tempfile.
Index: lib/cgi/util.rb
===================================================================
--- lib/cgi/util.rb	(revision 36421)
+++ lib/cgi/util.rb	(revision 36422)
@@ -22,6 +22,7 @@
 
   # The set of special characters and their escaped values
   TABLE_FOR_ESCAPE_HTML__ = {
+    "'" => '&apos;',
     '&' => '&amp;',
     '"' => '&quot;',
     '<' => '&lt;',
@@ -32,7 +33,7 @@
   #   CGI::escapeHTML('Usage: foo "bar" <baz>')
   #      # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
   def CGI::escapeHTML(string)
-    string.gsub(/[&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
+    string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
   end
 
   # Unescape a string that has been HTML-escaped
@@ -41,8 +42,9 @@
   def CGI::unescapeHTML(string)
     enc = string.encoding
     if [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE].include?(enc)
-      return string.gsub(Regexp.new('&(amp|quot|gt|lt|#[0-9]+|#x[0-9A-Fa-f]+);'.encode(enc))) do
+      return string.gsub(Regexp.new('&(apos|amp|quot|gt|lt|#[0-9]+|#x[0-9A-Fa-f]+);'.encode(enc))) do
         case $1.encode("US-ASCII")
+        when 'apos'                then "'".encode(enc)
         when 'amp'                 then '&'.encode(enc)
         when 'quot'                then '"'.encode(enc)
         when 'gt'                  then '>'.encode(enc)
@@ -53,9 +55,10 @@
       end
     end
     asciicompat = Encoding.compatible?(string, "a")
-    string.gsub(/&(amp|quot|gt|lt|\#[0-9]+|\#x[0-9A-Fa-f]+);/) do
+    string.gsub(/&(apos|amp|quot|gt|lt|\#[0-9]+|\#x[0-9A-Fa-f]+);/) do
       match = $1.dup
       case match
+      when 'apos'                then "'"
       when 'amp'                 then '&'
       when 'quot'                then '"'
       when 'gt'                  then '>'
Index: test/cgi/test_cgi_util.rb
===================================================================
--- test/cgi/test_cgi_util.rb	(revision 36421)
+++ test/cgi/test_cgi_util.rb	(revision 36422)
@@ -53,4 +53,12 @@
     assert_equal("<HTML>\n\t<BODY>\n\t</BODY>\n</HTML>\n",CGI::pretty("<HTML><BODY></BODY></HTML>","\t"))
   end
 
+  def test_cgi_escapeHTML
+    assert_equal(CGI::escapeHTML("'&\"><"),"&apos;&amp;&quot;&gt;&lt;")
+  end
+
+  def test_cgi_unescapeHTML
+    assert_equal(CGI::unescapeHTML("&apos;&amp;&quot;&gt;&lt;"),"'&\"><")
+  end
+
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]