3

我有一个字符串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 对已经转义的文本进行编码并获得所需的结果?

4

1 回答 1

5

要得到这个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) }}

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

于 2013-10-16T11:45:06.340 回答