Ruby on Rails:如何将字符串呈现为HTML?
我有
@str = "Hi"
在我的观点中:
页面上显示的内容是:hello
编辑:案例在哪里
@str = "hello"
如果在我看来我做
HTML源代码是hellohello(没有反斜杠转义双引号)。 什么是“unescape”那些双引号的最佳方式?
9个解决方案
306 votes
UPDATE
出于安全原因,建议使用raw而不是raw。
发生的事情是,作为一种安全措施,Rails正在为您转义字符串,因为它可能嵌入了恶意代码。 但是如果你告诉Rails你的字符串是raw,它会直接通过它。
@str = "Hi".html_safe
要么
@str = "Hi"
使用raw工作正常,但它所做的只是将字符串转换为字符串,然后调用html_safe。 当我知道我有一个字符串时,我更喜欢直接调用html_safe,因为它跳过了一个不必要的步骤,使它更清楚发生了什么。 有关字符串转义和XSS保护的详细信息,请参见此Asciicast。
Jacob answered 2019-05-10T18:56:25Z
16 votes
使用原始:
但正如@ jmort253正确地说的那样,考虑HTML真正属于哪里。
Michael Stum answered 2019-05-10T18:56:56Z
12 votes
如果您使用的是使用Erubis的rails,那么最酷的方法就是使用Erubis
注意双等号。 有关详细信息,请参阅SO上的相关问题。
jibiel answered 2019-05-10T18:57:27Z
8 votes
您还可以使用simple_format(@str)删除恶意代码。 在这里阅读更多:[http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format]
bcackerman answered 2019-05-10T18:57:51Z
7 votes
您正在将业务逻辑与内容混合在一起。 相反,我建议将数据发送到您的页面,然后使用类似JQuery的东西将数据放在您需要的地方。
这样做的好处是可以将HTML中的所有HTML保留在它所属的HTML页面中,这样您的Web设计人员就可以在以后修改HTML而无需通过服务器端代码。
或者,如果您不想使用JavaScript,可以试试这个:
@str = "Hi"
至少这种方式你的HTML在它所属的HTML页面中。
jmort253 answered 2019-05-10T18:58:36Z
6 votes
或者你可以试试CGI.unescapeHTML方法。
CGI.unescapeHTML "<p>This is a Paragraph.</p>"
=> "
This is a Paragraph.
"Arman Ortega answered 2019-05-10T18:59:00Z
0 votes
既然你正在翻译,并从一个人的蹩脚编码文件中挑选你想要的代码,你可以使用content_tag,与你的正则表达式相结合。
从api文档窃取,你可以将这个翻译的代码插入content_tag,如:
"#{translated_class}" do -%>
# =>
不知道你的代码,这种想法将确保你的翻译代码过于顺从。
pjammer answered 2019-05-10T18:59:38Z
0 votes
@str = "hello" 如果在我看来我做
HTML源代码是hello,其中我真正想要的是hello(没有反斜杠转义双&gt;引号)。 什么是“unescape”那些双引号的最佳方式?
解决方案:在单引号内使用双引号(或在double内部使用单引号)以避免使用反斜杠转义。
@str = 'hello'
Crash answered 2019-05-10T19:00:17Z
0 votes
html_safe版本在Rails 4中运行良好...
Administrators only ".html_safe if current_user.admin? %
>
G. A. answered 2019-05-10T19:00:43Z