<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *SVN*
 
+* add json_escape ERB util to escape html entities in json strings that are output in HTML pages. [rick]
+
 * Provide a helper proxy to access helper methods from outside views. Closes #10839 [Josh Peek]
   e.g. ApplicationController.helpers.simple_format(text)
 </diff>
      <filename>actionpack/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,8 @@ require 'erb'
 
 class ERB
   module Util
-    HTML_ESCAPE = { '&amp;' =&gt; '&amp;amp;', '&quot;' =&gt; '&amp;quot;', '&gt;' =&gt; '&amp;gt;', '&lt;' =&gt; '&amp;lt;' }
+    HTML_ESCAPE = { '&amp;' =&gt; '&amp;amp;',  '&gt;' =&gt; '&amp;gt;',   '&lt;' =&gt; '&amp;lt;', '&quot;' =&gt; '&amp;quot;' }
+    JSON_ESCAPE = { '&amp;' =&gt; '\u0026', '&gt;' =&gt; '\u003E', '&lt;' =&gt; '\u003C'}
 
     # A utility method for escaping HTML tag characters.
     # This method is also aliased as &lt;tt&gt;h&lt;/tt&gt;.
@@ -16,6 +17,23 @@ class ERB
     def html_escape(s)
       s.to_s.gsub(/[&amp;&quot;&gt;&lt;]/) { |special| HTML_ESCAPE[special] }
     end
+
+    # A utility method for escaping HTML entities in JSON strings.
+    # This method is also aliased as &lt;tt&gt;j&lt;/tt&gt;.
+    #
+    # In your ERb templates, use this method to escape any HTML entities:
+    #   &lt;%=j @person.to_json %&gt;
+    #
+    # ==== Example:
+    #   puts json_escape(&quot;is a &gt; 0 &amp; a &lt; 10?&quot;)
+    #   # =&gt; is a \u003E 0 \u0026 a \u003C 10?
+    def json_escape(s)
+      s.to_s.gsub(/[&amp;&quot;&gt;&lt;]/) { |special| JSON_ESCAPE[special] }
+    end
+
+    alias j json_escape
+    module_function :j
+    module_function :json_escape
   end
 end
 </diff>
      <filename>actionpack/lib/action_view/template_handlers/erb.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,21 +2,17 @@ require 'abstract_unit'
 
 class ErbUtilTest &lt; Test::Unit::TestCase
   include ERB::Util
-  
-  def test_amp
-    assert_equal '&amp;amp;', html_escape('&amp;')
-  end
-  
-  def test_quot
-    assert_equal '&amp;quot;', html_escape('&quot;')
-  end
 
-  def test_lt
-    assert_equal '&amp;lt;', html_escape('&lt;')
-  end
+  ERB::Util::HTML_ESCAPE.each do |given, expected|
+    define_method &quot;test_html_escape_#{expected.gsub /\W/, ''}&quot; do
+      assert_equal expected, html_escape(given)
+    end
 
-  def test_gt
-    assert_equal '&amp;gt;', html_escape('&gt;')
+    unless given == '&quot;'
+      define_method &quot;test_json_escape_#{expected.gsub /\W/, ''}&quot; do
+        assert_equal ERB::Util::JSON_ESCAPE[given], json_escape(given)
+      end
+    end
   end
   
   def test_rest_in_ascii</diff>
      <filename>actionpack/test/template/erb_util_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0bea3f8391e985157f3aecdf50a5d61de7aa7f0c</id>
    </parent>
  </parents>
  <author>
    <name>Rick Olson</name>
    <email>technoweenie@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/0ff7a2d89fc95dcb0a32ed92aab7156b0778a7ea</url>
  <id>0ff7a2d89fc95dcb0a32ed92aab7156b0778a7ea</id>
  <committed-date>2008-04-07T21:52:01-07:00</committed-date>
  <authored-date>2008-04-07T21:52:01-07:00</authored-date>
  <message>add json_escape ERB util to escape html entities in json strings that are output in HTML pages. [rick]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9241 5ecf4fe2-1ee6-0310-87b1-e25e094e27de</message>
  <tree>af15ea4a71c680931264823859e8c71e2f6da1b5</tree>
  <committer>
    <name>Rick Olson</name>
    <email>technoweenie@gmail.com</email>
  </committer>
</commit>
