2012-11-22 37 views
11

我使用Symfony2.1和具有默認config.ymlSymfony2的HTML中的反式樹枝過濾

Documentation said

{# but static strings are never escaped #} 
    {{ '<h3>foo</h3>'|trans }} 

但是,如果我複製並粘貼到我的空模板(不任何額外的自動景觀或其他)我得到了逃脫的字符串<h3>foo</h3>。我做錯了什麼?

+0

我提供了一個答案,但我想知道你爲什麼會想這樣做在實踐中,如果你想改變你的標記會需要更新所有翻譯密鑰。或者,這是一個簡化的例子,你真的使用消息佔位符將html注入到翻譯中? – redbirdo

+0

是的,這是一個簡單的例子。在現實生活中,我想在標籤之間插入一個變量:'{{'您好%var%'| trans({'%var%':var})}}'。現在要做到這一點,我必須寫:'{{'你好,%var%'| trans({'%var%':var | e})| raw}}' – Mikhail

回答

14

twig raw filter試試:

{{ '<h3>foo</h3>' | trans | raw }} 

不過,如果你正在處理任何用戶輸入不使用raw過濾器!它允許跨站點腳本攻擊,according to the creators of Symfony。看到this similar question一個安全但更乏味的選擇。

+0

是的,它的工作原理。所以,說''但靜態字符串永遠不會逃脫''文檔是錯誤的。靜態字符串也會被轉義。 – Mikhail

+1

嗯,我只在翻譯中使用過html,我一直在使用佔位符,在這種情況下字符串的定義不是靜態的。你是對的,文檔建議這個例子應該沒​​有原始的工作,在這種情況下,這是一個錯誤,除非你不使用最新版本的Symfony,這是一個最近的變化? – redbirdo

+1

而且,如果您在Twig模板中注入了一些用戶數據,則會創建一個安全漏洞:http://blog.insight.sensiolabs.com/2013/11/28/a-new-batch-of-rules html的。故事的道德:不要使用'生'! –