Php Twig:url在传递给Twitter共享按钮时编码了两次

Php Twig:url在传递给Twitter共享按钮时编码了两次,php,twitter,symfony,twig,Php,Twitter,Symfony,Twig,我正在用Symfony2开发一个简单的页面,使用Twig作为模板引擎 我有一个url列表,我想为每个url添加Twitter共享按钮。我所做的是在url数组上进行一个简单的循环,然后为循环中的每个Twitter按钮设置url。看起来这根细枝首先对url进行了编码,而Twitter脚本又对其进行了编码。所以推特分享数量不匹配。代码(在循环中)如下所示,页面末尾还有另一部分Twitter代码: <a href="https://twitter.com/share" class="twitter

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

我有一个url列表,我想为每个url添加Twitter共享按钮。我所做的是在url数组上进行一个简单的循环,然后为循环中的每个Twitter按钮设置url。看起来这根细枝首先对url进行了编码,而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

<>这并不能使推特计数工作,因为它把这两个视为不同的URL。< /P> 我还尝试使用一些过滤器,例如,
{{s.url | raw}}
,但它不起作用


所以我的问题是:如何避免这种情况?有没有办法告诉twig(或twitter)不要对url进行编码?

您可以在twig中使用
{%autoescape false%}
声明来关闭自动转义,然后再将代码保留为原始状态。这将使您输出的任何字符串都没有转义,因此您的URL不会转义两次。确保使用
{%endautoescape%}

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

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

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

一篇旧文章,但看起来您现在可以使用“原始”过滤器了。这应该做到:

{{ s.url|raw }}

一篇旧文章,但看起来您现在可以使用“原始”过滤器了。这应该做到:

{{ s.url|raw }}

细枝处理前s.url的值是多少?(来自控制器的var_dump)来自控制器的var_dump,它是http%3A%2F%2Fwww.example.com%2F我不知道Twitter API,但您可能在页面中包含来自Twitter的JS文件。也许这个脚本会解析源代码并在每个a.twitter-share-button上应用urlencode。。。您是否尝试过在没有第一次传递的情况下将原始URL从控制器传递到细枝?细枝处理前s.URL的值是多少?(来自控制器的var_dump)来自控制器的var_dump,它是http%3A%2F%2Fwww.example.com%2F我不知道Twitter API,但您可能在页面中包含来自Twitter的JS文件。也许这个脚本会解析源代码并在每个a.twitter-share-button上应用urlencode。。。您是否尝试过在没有第一次传递的情况下将原始URL从控制器传递到细枝?