如何在Twig中对HTML转义文本进行URL编码?

时间:2013-10-16 11:37:14

标签: php symfony twig

我有一个字符串Picture > 1000 words,它存储了HTML转义Picture > 1000 words。我需要对原始字符串进行URL编码以获得Picture%20%3E%201000%20words

我尝试了不同的过滤器序列,但没有一个产生所需的结果。

{# title = "Picture > 1000 words" #}

{{ title | url_encode(true)  }}
{{ title | raw | url_encode(true)  }}
{{ title | url_encode(true) | raw  }}

在所有3个案例中结果相同:Picture%20%26gt%3B%201000%20words。如何避免Twig编码已转义的文本并获得所需的结果?

1 个答案:

答案 0 :(得分:2)

要获得此Picture%20%3E%201000%20words,您应该拥有没有html实体的原始字符串

所以这应该有效:

{% set title = "Picture > 1000 words" %}

{{ title | url_encode(true)  }}

如果您确实需要解码模板中的实体,可以为此目的注册自定义过滤器:

$filter = new Twig_SimpleFilter('decode_entities', function ($string) {
   return html_entity_decode($string);
});

// then connect it with environment

$twig = new Twig_Environment($loader);
$twig->addFilter($filter);

然后像这样使用它:

{{ title | decode_entities | url_encode(true) }}

修改

刚刚尝试了最新上游树枝的示例,这可以按预期工作:

{{ title | raw | url_encode(true) }}

您的问题是字符串实体不正确