2

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

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

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

我在渲染页面上获得的 url 是:(http%253A%252F%252Fwww.example.com%252F两次编码传递)而不是http%3A%2F%2Fwww.example.com%2F(一次编码传递,正确)。看起来%被再次编码为%25.

这不会使 Twitter 计数工作,因为它将这两个视为不同的 url。

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

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

4

2 回答 2

3

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

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

完整的 Twig HTML 转义文档

于 2012-05-07T04:24:39.393 回答
1

一个旧帖子,但看起来您现在可以使用“原始”过滤器。这应该这样做:

{{ s.url|raw }}

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

于 2014-05-12T16:03:57.343 回答