我使用Symfony2.1和具有默認config.ymlSymfony2的HTML中的反式樹枝過濾
{# but static strings are never escaped #}
{{ '<h3>foo</h3>'|trans }}
但是,如果我複製並粘貼到我的空模板(不任何額外的自動景觀或其他)我得到了逃脫的字符串<h3>foo</h3>
。我做錯了什麼?
我使用Symfony2.1和具有默認config.ymlSymfony2的HTML中的反式樹枝過濾
{# but static strings are never escaped #}
{{ '<h3>foo</h3>'|trans }}
但是,如果我複製並粘貼到我的空模板(不任何額外的自動景觀或其他)我得到了逃脫的字符串<h3>foo</h3>
。我做錯了什麼?
與twig raw filter試試:
{{ '<h3>foo</h3>' | trans | raw }}
不過,如果你正在處理任何用戶輸入不使用raw
過濾器!它允許跨站點腳本攻擊,according to the creators of Symfony。看到this similar question一個安全但更乏味的選擇。
是的,它的工作原理。所以,說''但靜態字符串永遠不會逃脫''文檔是錯誤的。靜態字符串也會被轉義。 – Mikhail
嗯,我只在翻譯中使用過html,我一直在使用佔位符,在這種情況下字符串的定義不是靜態的。你是對的,文檔建議這個例子應該沒有原始的工作,在這種情況下,這是一個錯誤,除非你不使用最新版本的Symfony,這是一個最近的變化? – redbirdo
而且,如果您在Twig模板中注入了一些用戶數據,則會創建一個安全漏洞:http://blog.insight.sensiolabs.com/2013/11/28/a-new-batch-of-rules html的。故事的道德:不要使用'生'! –
在翻譯中保存HTML資料是錯誤的,因爲翻譯人員通常會將其破譯。但是,如果你真的需要它:
{% trans %}<h3>foo</h3>{% endtrans %}
https://github.com/symfony/symfony/issues/2713#issuecomment-12510417
我提供了一個答案,但我想知道你爲什麼會想這樣做在實踐中,如果你想改變你的標記會需要更新所有翻譯密鑰。或者,這是一個簡化的例子,你真的使用消息佔位符將html注入到翻譯中? – redbirdo
是的,這是一個簡單的例子。在現實生活中,我想在標籤之間插入一個變量:'{{'您好%var%'| trans({'%var%':var})}}'。現在要做到這一點,我必須寫:'{{'你好,%var%'| trans({'%var%':var | e})| raw}}' – Mikhail