2016-07-27 10 views
1

私はsprintf(' href="%s%s"', ..., ...)をPHPファイルからそのTwigの代わりに置き換えようとしています。 Twigの補間機能を使いたいのですが、文字列式を二重引用符で囲む必要があります。には、href属性値を囲む埋め込み引用符が含まれています。Twig補間に二重引用符を埋め込む方法は?

これを行う方法はありますか?この点に関しては、ドキュメントはかなり軽量に見えます。

{{ " href="#{value1}#{value2)"" }}

+0

エスケープ処理では不十分です。これは、結果として得られる文字列に対して、twiggが自動的にhtmlの自動キャッピングを行うためです。 – Alsatian

答えて

5

あなたが"含めたい場合は、

{{ " href=\"#{value1}#{value2)\"" }} 

文字をエスケープする必要があります。しかし、それは良い方法のような属性に直接値を含めることです

良い考えではありません。

<a href="{{url}}">Some link</a> 

もちろん、連結を使用することができます。

<a href="{{value1~value2}}">Some link</a> 
4

最善の解決策がある:そう

href="{{value1}}{{value2}}" 

、value1とvalue2の両方が安全にHTMLの特殊文字についてはエスケープされます。二重引用符は直接出力されます。

あなたの方法が悪い習慣である理由:

あなたが何をしたいのかされ(この二つは同じです):

{{ " href=\"#{value1}#{value2}\"" }} 

それとも

{{ ' href="'~value1~value2~'"' }} 

はそれをやって、それがhrefの二重引用符をエスケープし、連結でそれらを統合します。

しかし、連結は{{...}}になっているため、結果として得られる二重引用符もHTMLオートスケープでエスケープされ、&quot;に置き換えられます。

あなたはとても自動エスケープこのHTMLを無効にすることができます:

{{ 'href="'~value1~value2~'"' | raw}} 

をしかし、value1とvalue2のは、HTMLはもう逃れ、そしてあなたはXSSの注射にさらされることがないので、それは、危険です。

+0

_最高の解決策_、そして_悪い習慣_人々は最初に何を見て使用するべきですか? – FirstOne

関連する問題