diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 54ab799..027c0b3 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -4,6 +4,8 @@ require 'bigdecimal' module Liquid module StandardFilters + HTML_ESCAPE = { '&' => '&', '>' => '>', '<' => '<', '"' => '"', "'" => ''' } + HTML_ESCAPE_ONCE_REGEXP = /["><']|&(?!([a-zA-Z]+|(#\d+));)/ # Return the size of an array or of an string def size(input) @@ -31,9 +33,7 @@ module Liquid end def escape_once(input) - ActionView::Helpers::TagHelper.escape_once(input) - rescue NameError - input + input.to_s.gsub(HTML_ESCAPE_ONCE_REGEXP, HTML_ESCAPE) end alias_method :h, :escape diff --git a/test/liquid/standard_filter_test.rb b/test/liquid/standard_filter_test.rb index 91c219d..d9c5cd6 100644 --- a/test/liquid/standard_filter_test.rb +++ b/test/liquid/standard_filter_test.rb @@ -89,7 +89,7 @@ class StandardFiltersTest < Test::Unit::TestCase end def test_escape_once - assert_equal '<strong>', @filters.escape_once(@filters.escape('')) + assert_equal '<strong>Hulk</strong>', @filters.escape_once('<strong>Hulk') end def test_truncatewords