2012-04-25 20 views
2

私は、Twigをテンプレートエンジンとして使用して、Symfony2で簡単なページを開発しています。Twig:URLを2回エンコードしてTwitter共有ボタンに渡します。

私はURLのリストを持っています。私は各URLのTwitter共有ボタンを追加したいと思います。私がしているのは、urls配列の単純なサイクルで、dinaycallyはサイクル内のすべてのTwitterボタンのURLを設定します。 twigが最初にURLをエンコードしているように見え、Twitterのスクリプトが再びそれをエンコードしているようです。だからTwitterのシェアは一致しない。コードは、(サイクル内の)ページの末尾にTwitterのコードの他の部分があると、以下の通りである:

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

Iがレンダリングされたページに乗るURLは:代わりhttp%253A%252F%252Fwww.example.com%252F(二符号化パス) http%3A%2F%2Fwww.example.com%2F(1つのエンコードパス、正しい)。 %が再び%25にエンコードされているようです。

これは、2つの異なるURLとみなされているため、これはTwitterのカウント作業にはなりません。

また、いくつかのフィルタを使用しようとしました。 {{ s.url|raw }}が動作しませんでした。

私の質問です:これを避けるには? twig(またはtwitter)にURLをエンコードしないように指示する方法はありますか?

+0

を小枝処理前s.urlの値は何ですか? (コントローラからのvar_dump) – AlterPHP

+0

コントローラからのvar_dumping、それはhttp%3A%2F%2Fwww.example.com%2F –

+0

です。Twitter APIはわかりませんが、あなたのページにTwitterからのJSファイルを含めることができます。たぶんこのスクリプトはソースコードを解析し、すべてのa.twitter-share-buttonにurlencodeを適用します...コントローラからRaw URLを最初のパスなしでTwigに渡そうとしましたか? – AlterPHP

答えて

3

生のままにしたいコードの前に、{% autoescape false %}宣言を使用して、いつでもTwiggでオートエスケープをオフにすることができます。これにより、エスケープされていない文字列が出力され、URLは2回エスケープされません。あなたは{% 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

関連する問題