我有
@str = "<b>Hi</b>"
在我的 erb 观点中:
<%= @str %>
页面上会显示的是: <b>Hi</b>
而我真正想要的是 Hi 。将字符串“解释”为 HTML 标记的 ruby 方法是什么?
编辑:情况
@str = "<span class=\"classname\">hello</span>"
如果我认为我这样做
<%raw @str %>
HTML 源代码是 <span class=\"classname\">hello</span
> 我真正想要的是 <span class="classname">hello</span>
(没有转义双引号的反斜杠)。 “取消转义”那些双引号的最佳方法是什么?
原文由 Tim 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新
出于安全原因,建议使用
sanitize
而不是html_safe
。发生的事情是,作为一种安全措施,Rails 正在为您转义您的字符串,因为它可能嵌入了恶意代码。但是如果你告诉 Rails 你的字符串是
html_safe
,它会直接通过。或者
使用
raw
工作正常,但它所做的只是将字符串转换为字符串,然后调用html_safe
。当我知道我有一个字符串时,我更喜欢直接调用html_safe
,因为它跳过了不必要的步骤并使发生的事情更清楚。有关字符串转义和 XSS 保护的详细信息在 此 Asciicast 中。