let url_encode filter also accept array of query parameters

This commit is contained in:
Tobias Schultze
2013-02-22 10:17:24 +01:00
committed by Fabien Potencier
parent 15336c154c
commit fcf9525dc3
4 changed files with 32 additions and 6 deletions
+1
View File
@@ -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)
+12 -3
View File
@@ -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
+7 -3
View File
@@ -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);
}
@@ -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