fixed json_encode filter (thanks to Koc for the fix)

This commit is contained in:
Fabien Potencier
2011-06-24 11:26:17 +02:00
parent 066d561e43
commit 612fa7bc51
2 changed files with 31 additions and 1 deletions
+19 -1
View File
@@ -48,7 +48,7 @@ class Twig_Extension_Core extends Twig_Extension
// encoding
'url_encode' => new Twig_Filter_Function('twig_urlencode_filter'),
'json_encode' => new Twig_Filter_Function('json_encode'),
'json_encode' => new Twig_Filter_Function('twig_jsonencode_filter'),
// string filters
'title' => new Twig_Filter_Function('twig_title_string_filter', array('needs_environment' => true)),
@@ -232,6 +232,24 @@ function twig_urlencode_filter($url, $raw = false)
return urlencode($url);
}
function twig_jsonencode_filter($value, $options = 0)
{
if ($value instanceof Twig_Markup) {
$value = (string) $value;
} elseif (is_array($value)) {
array_walk_recursive($value, '_twig_markup2string');
}
return json_encode($value, $options);
}
function _twig_markup2string(&$value)
{
if ($value instanceof Twig_Markup) {
$value = (string) $value;
}
}
function twig_array_merge($arr1, $arr2)
{
if (!is_array($arr1) || !is_array($arr2)) {
@@ -0,0 +1,12 @@
--TEST--
"json_encode" filter
--TEMPLATE--
{{ "foo"|json_encode|raw }}
{{ foo|json_encode|raw }}
{{ [foo, "foo"]|json_encode|raw }}
--DATA--
return array('foo' => new Twig_Markup('foo'))
--EXPECT--
"foo"
"foo"
["foo","foo"]