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