Changeset 9241
- Timestamp:
- 04/08/08 04:52:01 (8 months ago)
- Files:
-
- trunk/actionpack/CHANGELOG (modified) (1 diff)
- trunk/actionpack/lib/action_view/template_handlers/erb.rb (modified) (2 diffs)
- trunk/actionpack/test/template/erb_util_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionpack/CHANGELOG
r9234 r9241 1 1 *SVN* 2 3 * add json_escape ERB util to escape html entities in json strings that are output in HTML pages. [rick] 2 4 3 5 * Provide a helper proxy to access helper methods from outside views. Closes #10839 [Josh Peek] trunk/actionpack/lib/action_view/template_handlers/erb.rb
r8689 r9241 3 3 class ERB 4 4 module Util 5 HTML_ESCAPE = { '&' => '&', '"' => '"', '>' => '>', '<' => '<' } 5 HTML_ESCAPE = { '&' => '&', '>' => '>', '<' => '<', '"' => '"' } 6 JSON_ESCAPE = { '&' => '\u0026', '>' => '\u003E', '<' => '\u003C'} 6 7 7 8 # A utility method for escaping HTML tag characters. … … 17 18 s.to_s.gsub(/[&"><]/) { |special| HTML_ESCAPE[special] } 18 19 end 20 21 # A utility method for escaping HTML entities in JSON strings. 22 # This method is also aliased as <tt>j</tt>. 23 # 24 # In your ERb templates, use this method to escape any HTML entities: 25 # <%=j @person.to_json %> 26 # 27 # ==== Example: 28 # puts json_escape("is a > 0 & a < 10?") 29 # # => is a \u003E 0 \u0026 a \u003C 10? 30 def json_escape(s) 31 s.to_s.gsub(/[&"><]/) { |special| JSON_ESCAPE[special] } 32 end 33 34 alias j json_escape 35 module_function :j 36 module_function :json_escape 19 37 end 20 38 end trunk/actionpack/test/template/erb_util_test.rb
r8564 r9241 3 3 class ErbUtilTest < Test::Unit::TestCase 4 4 include ERB::Util 5 6 def test_amp7 assert_equal '&', html_escape('&')8 end9 10 def test_quot11 assert_equal '"', html_escape('"')12 end13 5 14 def test_lt 15 assert_equal '<', html_escape('<') 16 end 6 ERB::Util::HTML_ESCAPE.each do |given, expected| 7 define_method "test_html_escape_#{expected.gsub /\W/, ''}" do 8 assert_equal expected, html_escape(given) 9 end 17 10 18 def test_gt 19 assert_equal '>', html_escape('>') 11 unless given == '"' 12 define_method "test_json_escape_#{expected.gsub /\W/, ''}" do 13 assert_equal ERB::Util::JSON_ESCAPE[given], json_escape(given) 14 end 15 end 20 16 end 21 17