Ruby on Rails:如何将字符串呈现为HTML?

时间:2011-01-02 03:12:28

标签: html ruby-on-rails ruby string

我有

@str = "<b>Hi</b>"

在我的观点中:

<%= @str %>

页面上显示的内容是:<b>Hi</b>当我真正想要的是。将字符串“解释”为HTML标记的红宝石方法是什么?


修改

的情况
@str = "<span class=\"classname\">hello</span>"

如果在我看来我做了

<%raw @str %>

HTML源代码为<span class=\"classname\">hello</span&gt;我真正想要的是<span class="classname">hello</span>(没有反斜杠转义双引号)。什么是“取消”双引号的最好方法?

9 个答案:

答案 0 :(得分:315)

更新

出于安全原因,建议使用sanitize代替html_safeLink


正在发生的事情是,作为安全措施,Rails正在为您转义字符串,因为它可能嵌入了恶意代码。但是如果你告诉Rails你的字符串是html_safe,它就会直接通过它。

@str = "<b>Hi</b>".html_safe
<%= @str %>

OR

@str = "<b>Hi</b>"
<%= @str.html_safe %>

使用raw工作正常,但它所做的只是将字符串转换为字符串,然后调用html_safe。当我知道我有一个字符串时,我更喜欢直接调用html_safe,因为它跳过了一个不必要的步骤,使它更清楚发生了什么。有关字符串转义和XSS保护的详细信息位于this Asciicast

答案 1 :(得分:16)

使用raw

<%=raw @str >

但是正如@ jmort253正确地说的那样,考虑HTML真正属于哪里。

答案 2 :(得分:12)

如果您使用rails <%== @str > ,那么最酷的方式就是

{{1}}

注意双等号。关于SO的Erubis相关问题了解更多信息。

答案 3 :(得分:8)

您还可以使用simple_format(@str)删除恶意代码。在此处阅读更多内容:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

答案 4 :(得分:7)

您正在将业务逻辑与内容混合在一起。相反,我建议将数据发送到您的页面,然后使用类似JQuery的东西将数据放在您需要的地方。

这样做的好处是可以将HTML中的所有HTML保留在它所属的HTML页面中,这样您的Web设计人员就可以在以后修改HTML而无需通过服务器端代码。

或者,如果您不想使用JavaScript,可以试试这个:

@str = "Hi"

<b><%= @str ></b>

至少这样,你的HTML就在它所属的HTML页面中。

答案 5 :(得分:6)

或者您可以尝试 CGI.unescapeHTML 方法。

CGI.unescapeHTML "&lt;p&gt;This is a Paragraph.&lt;/p&gt;"
=> "<p>This is a Paragraph.</p>"

答案 6 :(得分:0)

因为你正在翻译,并从一个人的蹩脚编码文件中挑选你想要的代码,你可以使用content_tag,与你的正则表达式组合。

从api文档中窃取,您可以将此翻译代码插入到content_tag中,如:

<%= content_tag translated_tag_type.to_sym, :class => "#{translated_class}" do -%>
<%= translated_text %>
<% end -%>
# => <div class="strong">Hello world!</div>

不了解您的代码,这种想法将确保您的翻译代码过于合规。

答案 7 :(得分:0)

  

@str = "<span class=\"classname\">hello</span>"   如果在我看来我做了

     

<%raw @str %>   HTML源代码是<span class=\"classname\">hello</span>,其中我真正想要的是<span class="classname">hello</span>(没有反斜杠转义双&gt;引号)。什么是“取消”双引号的最好方法?

解决方案:在单引号内使用双引号(或双引号中的单引号)以避免使用反斜杠转义。

@str = '<span class="classname">hello</span>'
<%raw @str %>

答案 8 :(得分:0)

html_safe版本在Rails 4中运行良好......

<%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
>