Skip to content
Browse files

let url_encode filter also accept array of query parameters

  • Loading branch information...
1 parent 15336c1 commit fcf9525dc3e96aaecf8566a1a9e0a9335d6b515a @Tobion Tobion committed with Feb 22, 2013
Showing with 32 additions and 6 deletions.
  1. +1 −0 CHANGELOG
  2. +12 −3 doc/filters/url_encode.rst
  3. +7 −3 lib/Twig/Extension/Core.php
  4. +12 −0 test/Twig/Tests/Fixtures/filters/urlencode.test
View
1 CHANGELOG
@@ -1,6 +1,7 @@
* 1.12.3 (2013-XX-XX)
* added a batch filter
+ * added support for encoding an array as query string in the url_encode filter
* 1.12.2 (2013-02-09)
View
15 doc/filters/url_encode.rst
@@ -1,14 +1,23 @@
``url_encode``
==============
-The ``url_encode`` filter URL encodes a given string:
+.. versionadded:: 1.12.3
+ Support for encoding an array as query string was added in Twig 1.12.3.
+
+The ``url_encode`` filter percent encodes a given string as URL segment
+or an array as query string:
.. code-block:: jinja
- {{ data|url_encode() }}
+ {{ "path-seg*ment"|url_encode }}
+ {# outputs "path-seg%2Ament" #}
+
+ {{ {'param': 'value', 'foo': 'bar'}|url_encode }}
+ {# outputs "param=value&foo=bar" #}
.. note::
- Internally, Twig uses the PHP `urlencode`_ function.
+ Internally, Twig uses the PHP `urlencode`_ or the `http_build_query`_ function.
.. _`urlencode`: http://php.net/urlencode
+.. _`http_build_query`: http://php.net/http_build_query
View
10 lib/Twig/Extension/Core.php
@@ -515,15 +515,19 @@ function twig_number_format_filter(Twig_Environment $env, $number, $decimal = nu
}
/**
- * URL encodes a string.
+ * URL encodes a string as a path segment or an array as a query string.
*
- * @param string $url A URL
- * @param bool $raw true to use rawurlencode() instead of urlencode
+ * @param string|array $url A URL or an array of query parameters
+ * @param bool $raw true to use rawurlencode() instead of urlencode
*
* @return string The URL encoded value
*/
function twig_urlencode_filter($url, $raw = false)
{
+ if (is_array($url)) {
+ return http_build_query($url, '', '&');
+ }
+
if ($raw) {
return rawurlencode($url);
}
View
12 test/Twig/Tests/Fixtures/filters/urlencode.test
@@ -0,0 +1,12 @@
+--TEST--
+"url_encode" filter
+--TEMPLATE--
+{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode }}
+{{ {foo: "bar", number: 3, "spéßi%l": "e%c0d@d", "spa ce": ""}|url_encode|raw }}
+{{ {}|url_encode|default("default") }}
+--DATA--
+return array()
+--EXPECT--
+foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa+ce=
+foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa+ce=
+default

0 comments on commit fcf9525

Please sign in to comment.
Something went wrong with that request. Please try again.