2012-04-25 56 views
2

我正在用Symfony2开发一个简单的页面,使用Twig作为模板引擎。Twig:将URL传递给Twitter时分两次分享按钮

我有一个网址列表,我想为每个网址添加Twitter分享按钮。我所做的是在urls数组上进行一个简单的循环,并且dinaycally为循环中的每个Twitter按钮设置url。它看起来像枝条首先对网址进行编码,而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的工作,因为它认为这两个为不同的网址。

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

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

+0

什么s.url的嫩枝治疗前的价值? (来自控制器的var_dump) – AlterPHP 2012-05-02 14:12:46

+0

来自控制器的var_dumping,它是http%3A%2F%2Fwww.example.com%2F – 2012-05-02 14:40:06

+0

我不知道Twitter API,但可能在您的页面中包含来自Twitter的JS文件。也许这个脚本解析源代码并在每个atwitter-share-button上应用一个urlencode ......你是否尝试过将一个原始URL从控制器传递给Twig,而没有第一次传递? – AlterPHP 2012-05-02 15:57:03

回答

3

通过在要离开原始代码之前使用{% autoescape false %}声明,您总是可以在Twig中关闭自动转义。这会让你输出的任何字符串转义,因此你的URL不会被转义两次。请确保您打开autoescaping回用{% endautoescape %}

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

Full Twig HTML Escaping Documentation