关于Ruby on Rails的i18n,<和>被>取代; < ;什么时候不打算

时间:2010-10-21 15:50:02

标签: ruby-on-rails internationalization yaml escaping

我正在rails应用程序中创建国际化的语言环境文件,并且有一个我想要包含标签的网址,例如

html.erb

  

<%= t(foo.bar.xxxx)%>

yml文件

  

foo:bar:         xxxx:“xxxx”

结果

  

& lt; a href =   “/info/index.html"> xxxx< / a& gt;

打破了我的链接。我没有红宝石部分,所以不应该这样吗? 或者我应该在yml文件中没有html标签吗?

Rails版本是3.0.1 Ruby版本是1.8.7 p249

2 个答案:

答案 0 :(得分:28)

您的HTML YAML密钥需要_html后缀:

foo:
  bar:
    xxxx_html: "<strong>Some HTML Here</strong>"

执行此Rails会将字符串标记为html_safe,并将呈现HTML而不是将其转换为&gt;&lt;

您还需要使用完整的密钥名称来引用它,当您致电xxxx时,Rails不会自动看到_html后缀。

<%= t 'foo.bar.xxxx_html' %>

答案 1 :(得分:2)

Rails通过防止模型数据显示为实际标记来防止注入攻击。原始函数阻止了转换。

确实

<%= raw t(foo.bar.xxxx) %> 

工作?