Rails 3:如何反转ERB“<%=”默认行为,以便我可以注入HTML?

时间:2011-01-19 05:22:19

标签: ruby-on-rails sanitization erb

我的问题与this one有关,但我试图反转“<%=”的默认Rails 3行为,以便我可以注入HTML。

在我的场景中,我有一个生成HTML的旧Rails 2插件。然后我的视图需要在页面中注入此HTML。

当此插件创建存储在变量html_to_show中的HTML时:

<p class="notice"><span></span>Sorry about this, but we have a problem...</p><p class="error"><span></span>Cannot go to next step</p>

在视图中我尝试像这样展示html_to_show的内容:

<%= html_to_show %>

...我在浏览器中得到的是:

&lt;p class="notice"&gt;&lt;span&gt;&lt;/span&gt;Sorry about this, but we have a problem...&lt;/p&gt;&lt;p class="error"&gt;&lt;span&gt;&lt;/span&gt;Cannot go to next step&lt;/p&gt;

如何让Rails 3完全按原样注入html_to_show的内容,而不进行任何清理?

2 个答案:

答案 0 :(得分:7)

简短回答:

<%= html_to_show.html_safe %>

答案很长:

Rails逃脱所有HTML以防止XSS攻击。添加.html_safe会阻止转义。

答案 1 :(得分:3)

<%= raw html_to_show %>

应该这样做。