2010-09-02 18 views
27

Rails uygulamasında (config/locale/[en | de] .yml) bazı çevirilerim var ve bunları <%=t "teasers.welcome" %> ile kullanıyorum. Örnek:Bir Rails çeviri dosyasında HTML kullanın

teasers: 
    welcome: "<strong>Welcome</strong> to the Website ..." 

yılında Raylar 2.3.8 bu Raylar 3 ile gayet güzel çalışıyor, HTML ... kaçarak &lt; çevrilir bu formu bu çeviriyi önlemek ve benzeri benim çeviri dosyalarında HTML kullanabilirsiniz nasıl Rails 2.3.8?

cevap

36

Ben şimdi release note itibaren rayları 3.

kullanırken

<%=h t("blah") %> 

yapmanın eşdeğerdir, raylar 2.x

<%= t("blah") %> 

yapıyor yüzünden olduğunu varsayalım s:

Anahtar raylar için öntanımlı XSS ​​çıkışını .

sürüm notlarına bir kez daha bu düzeltmek ve Kime:

Artık HTML çıktısını kaçmak için h (dize) aramak gerekir, tüm görünüm şablonlarında varsayılan olarak açıktır . unescaped dizgesini istiyorsanız, işlecini (string) arayın.

Dolayısıyla, sadece raw kullanarak dışında

<%= raw t("blah") %> 
+0

teşekkür için çok

teasers: welcome: "<strong>Welcome</strong> to the Website ..." 

anahtarı yeniden adlandırma! – Fu86

+11

Kongre yolu, '_html' ile biten anahtarları kullanmaktır. –

+1

"<% = raw t" welcome ", name: user.name%>' gibi çevirilere dinamik veri eklerken dikkatli olun. Kullanıcı, 'name' değerini bir javascript olarak ayarlarsa, XSS saldırısı yapıyorsunuz demektir. – Yoko

70

tarafından

<%= t("blah") %> 

yerine, bunu yapmak için bir diğer belgesiz (ama resmi) yolu var. _html ile biten tüm tuşlar otomatik olarak görüntülenmez hale getirilir.

Bu yanıt için

teasers: 
    welcome_html: "<strong>Welcome</strong> to the Website ..." 
+0

cool, Bunu bilmiyordum! – marcgg

+7

Aslında belgelenmiştir, buradadır http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros

İlgili konular