hello我真正想要的是 hello (没有转义双引号的反斜杠......" /> hello我真正想要的是 hello (没有转义双引号的反斜杠......"> hello我真正想要的是 hello (没有转义双引号的反斜杠......" />
我有
@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>
(没有转义双引号的反斜杠)。 “取消转义”这些双引号的最佳方法是什么?
%Q["quotation marks"] => "\"quotation marks\""
来源:en.wikibooks.org/wiki/Ruby_Programming/Syntax/… 不知道这是否有帮助。
更新
出于安全原因,建议使用 sanitize
而不是 html_safe
。
<%= sanitize @str %>
发生的事情是,作为一种安全措施,Rails 正在为您转义您的字符串,因为它可能嵌入了恶意代码。但是如果你告诉 Rails 你的字符串是 html_safe
,它会直接通过。
@str = "<b>Hi</b>".html_safe
<%= @str %>
或者
@str = "<b>Hi</b>"
<%= @str.html_safe %>
使用 raw
可以正常工作,但它所做的只是将字符串转换为字符串,然后调用 html_safe
。当我知道我有一个字符串时,我更喜欢直接调用 html_safe
,因为它跳过了一个不必要的步骤并使发生的事情更清楚。 this Asciicast 中提供了有关字符串转义和 XSS 保护的详细信息。
您还可以使用删除恶意代码的 simple_format(@str)
。在此处阅读更多信息:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
您将业务逻辑与内容混合在一起。相反,我建议将数据发送到您的页面,然后使用 JQuery 之类的东西将数据放在您需要的地方。
这样做的好处是可以将所有 HTML 保存在它所属的 HTML 页面中,这样您的网页设计人员可以稍后修改 HTML,而无需倾注服务器端代码。
或者如果你不想使用 JavaScript,你可以试试这个:
@str = "Hi"
<b><%= @str ></b>
至少这样你的 HTML 就在它所属的 HTML 页面中。
或者你可以试试 CGI.unescapeHTML 方法。
CGI.unescapeHTML "<p>This is a Paragraph.</p>"
=> "<p>This is a Paragraph.</p>"
既然您正在翻译,并从一个人的蹩脚编码文件中挑选出您想要的代码,您能否将 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>
不知道你的代码,这种想法会确保你翻译的代码过于兼容。
@str = "hello" 如果在我看来我这样做 <%raw @str %> HTML 源代码是 hello< /span> 我真正想要的是 hello (没有转义双引号的反斜杠)。 “取消转义”这些双引号的最佳方法是什么?
解决方案:在单引号内使用双引号(或在双引号内使用单引号)以避免使用反斜杠转义。
@str = '<span class="classname">hello</span>'
<%raw @str %>
html_safe 版本在 Rails 4 中运行良好...
<%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
>
raw
。很高兴知道这一点!