私はsprintf(' href="%s%s"', ..., ...)
をPHPファイルからそのTwigの代わりに置き換えようとしています。 Twigの補間機能を使いたいのですが、文字列式を二重引用符で囲む必要があります。には、href属性値を囲む埋め込み引用符が含まれています。Twig補間に二重引用符を埋め込む方法は?
これを行う方法はありますか?この点に関しては、ドキュメントはかなり軽量に見えます。
{{ " href="#{value1}#{value2)"" }}
私はsprintf(' href="%s%s"', ..., ...)
をPHPファイルからそのTwigの代わりに置き換えようとしています。 Twigの補間機能を使いたいのですが、文字列式を二重引用符で囲む必要があります。には、href属性値を囲む埋め込み引用符が含まれています。Twig補間に二重引用符を埋め込む方法は?
これを行う方法はありますか?この点に関しては、ドキュメントはかなり軽量に見えます。
{{ " href="#{value1}#{value2)"" }}
あなたが"
含めたい場合は、
{{ " href=\"#{value1}#{value2)\"" }}
文字をエスケープする必要があります。しかし、それは良い方法のような属性に直接値を含めることです
良い考えではありません。
<a href="{{url}}">Some link</a>
もちろん、連結を使用することができます。
<a href="{{value1~value2}}">Some link</a>
最善の解決策がある:そう
href="{{value1}}{{value2}}"
、value1とvalue2の両方が安全にHTMLの特殊文字についてはエスケープされます。二重引用符は直接出力されます。
あなたの方法が悪い習慣である理由:
あなたが何をしたいのかされ(この二つは同じです):
{{ " href=\"#{value1}#{value2}\"" }}
それとも
{{ ' href="'~value1~value2~'"' }}
はそれをやって、それがhrefの二重引用符をエスケープし、連結でそれらを統合します。
しかし、連結は{{...}}になっているため、結果として得られる二重引用符もHTMLオートスケープでエスケープされ、"
に置き換えられます。
あなたはとても自動エスケープこのHTMLを無効にすることができます:
{{ 'href="'~value1~value2~'"' | raw}}
をしかし、value1とvalue2のは、HTMLはもう逃れ、そしてあなたはXSSの注射にさらされることがないので、それは、危険です。
_最高の解決策_、そして_悪い習慣_人々は最初に何を見て使用するべきですか? – FirstOne
エスケープ処理では不十分です。これは、結果として得られる文字列に対して、twiggが自動的にhtmlの自動キャッピングを行うためです。 – Alsatian