Twig:url编码两次,同时将其传递给Twitter分享按钮


Twig: url encoded twice while passing it to Twitter share button

我正在使用Symfony2开发一个简单的页面,使用Twig作为模板引擎。

我有一个网址列表,我想为每个网址添加Twitter分享按钮。我所做的是在urls数组上一个简单的循环,然后为循环中的每个Twitter按钮设置网址。看起来树枝首先对网址进行编码,然后Twitter脚本再次对其进行编码。所以推特分享数不匹配。代码(循环内)如下,页面末尾还有另一部分Twitter代码:

<a href="https://twitter.com/share" class="twitter-share-button" data-url="{{ s.url }}">Tweet</a>

我在呈现的页面上得到的网址是:http%253A%252F%252Fwww.example.com%252F(两个编码传递)而不是http%3A%2F%2Fwww.example.com%2F(一个编码传递,正确)。看起来%再次编码为 %25 .

并不能使Twitter计数起作用,因为它将这两者视为不同的URL。

我还尝试使用一些过滤器,例如 {{ s.url|raw }},但它没有用。

所以我的问题是:如何避免这种情况?有没有办法告诉树枝(或推特)不对网址进行编码?

您始终可以在 Twig 中使用要保留原始代码之前的{% autoescape false %}声明来关闭自动转义。 这将使您输出的任何字符串保持未转义状态,因此您的 URL 不会被转义两次。 确保使用{% endautoescape %}重新打开自动转义

{% autoescape false %}
    <a href="https://twitter.com/share" class="twitter-share-button" data-url="{{ s.url }}">Tweet</a>
{% endautoescape %}

完整的树枝 HTML 转义文档

一个旧帖子,但看起来你现在可以使用"原始"过滤器。这应该可以做到:

{{ s.url|raw }}

http://twig.sensiolabs.org/doc/api.html#escaper-extension