diff --git a/History.md b/History.md index d1f90fa..99ff9ca 100644 --- a/History.md +++ b/History.md @@ -3,6 +3,7 @@ ## 3.0.0 / not yet released / branch "master" * ... +* Add url_encode to standard filters, see #421 [Derrick Reimer, djreimer] * Add uniq to standard filters [Florian Weingarten, fw42] * Add exception_handler feature, see #397 and #254 [Bogdan Gusiev, bogdan and Florian Weingarten, fw42] * Optimize variable parsing to avoid repeated regex evaluation during template rendering #383 [Jason Hiltz-Laforge, jasonhl] diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 2ace9e0..8cf51ea 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -42,6 +42,10 @@ module Liquid input.to_s.gsub(HTML_ESCAPE_ONCE_REGEXP, HTML_ESCAPE) end + def url_encode(input) + CGI.escape(input) rescue input + end + def slice(input, offset, length=nil) offset = Integer(offset) length = length ? Integer(length) : 1 diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 7e2cc6d..3fb9df8 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -118,6 +118,11 @@ class StandardFiltersTest < Minitest::Test assert_equal '<strong>Hulk</strong>', @filters.escape_once('<strong>Hulk') end + def test_url_encode + assert_equal 'foo%2B1%40example.com', @filters.url_encode('foo+1@example.com') + assert_equal nil, @filters.url_encode(nil) + end + def test_truncatewords assert_equal 'one two three', @filters.truncatewords('one two three', 4) assert_equal 'one two...', @filters.truncatewords('one two three', 2)