ruby 生成html,Ruby on Rails:如何将字符串呈现为HTML?

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 -%>

# =>

Hello world!

不知道你的代码,这种想法将确保你的翻译代码过于顺从。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值