在Rails转换文件中使用HTML

Fu8*_*u86 42 html translation localization ruby-on-rails

我在我的Rails应用程序(config/locale/[en | de] .yml)中有一些翻译,我在我的视图中使用它<%=t "teasers.welcome" %>.例:

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."
Run Code Online (Sandbox Code Playgroud)

在Rails 2.3.8中这很好用,使用Rails 3,HTML被转义并转换为&lt;...如何防止这种形式的翻译并在我的翻译文件中使用HTML,如Rails 2.3.8?

Sim*_*tti 94

除了使用之外raw,还有其他无证(但官方)的方法.所有以#结尾的键都会_html自动呈现为非转义状态.

重命名密钥

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."
Run Code Online (Sandbox Code Playgroud)

teasers:
    welcome_html: "<strong>Welcome</strong> to the Website ..."
Run Code Online (Sandbox Code Playgroud)

  • 实际上它已被记录,在这里http://guides.rubyonrails.org/i18n.html#using-safe-html-translations (10认同)

mar*_*cgg 41

我想是因为这样做

<%= t("blah") %>
Run Code Online (Sandbox Code Playgroud)

在rails 2.x中,现在相当于做

<%=h t("blah") %>
Run Code Online (Sandbox Code Playgroud)

当你使用rails 3时.

发行说明 s:

切换到默认的XSS转义为rails.

要解决这个问题,请再次从发行说明中解决:

您不再需要调用h(字符串)来转义HTML输出,默认情况下它在所有视图模板中都处于打开状态.如果你想要未转义的字符串,请调用raw(string).

所以只需更换

<%= t("blah") %>
Run Code Online (Sandbox Code Playgroud)

通过

<%= raw t("blah") %>
Run Code Online (Sandbox Code Playgroud)

  • 常规方法是使用以`_html`结尾的键. (13认同)
  • 如果您使用`<%= raw t"welcome",name:user.name%>`添加动态数据,请务必小心.如果用户将`name`值设置为某个javascript,则表示您正在进行XSS攻击. (3认同)