Tim*_*Tim 149 html ruby string ruby-on-rails
我有
@str = "<b>Hi</b>"
Run Code Online (Sandbox Code Playgroud)
在我的观点中:
<%= @str %>
Run Code Online (Sandbox Code Playgroud)
页面上显示的内容是:<b>Hi</b>当我真正想要的是嗨.将字符串"解释"为HTML标记的红宝石方法是什么?
编辑:案例在哪里
@str = "<span class=\"classname\">hello</span>"
Run Code Online (Sandbox Code Playgroud)
如果在我看来我做
<%raw @str %>
Run Code Online (Sandbox Code Playgroud)
HTML源代码是<span class=\"classname\">hello</span>我真正想要的是什么<span class="classname">hello</span>(没有反斜杠转义双引号).什么是"unescape"那些双引号的最佳方式?
Jac*_*cob 319
出于安全考虑,建议使用sanitize而不是html_safe.链接
发生的事情是,作为一种安全措施,Rails正在为您转义字符串,因为它可能嵌入了恶意代码.但是如果你告诉Rails你的字符串是什么html_safe,它会直接通过它.
@str = "<b>Hi</b>".html_safe
<%= @str %>
Run Code Online (Sandbox Code Playgroud)
要么
@str = "<b>Hi</b>"
<%= @str.html_safe %>
Run Code Online (Sandbox Code Playgroud)
使用raw工作正常,但它所做的只是将字符串转换为字符串,然后调用html_safe.当我知道我有一个字符串时,我更喜欢直接调用html_safe,因为它跳过了一个不必要的步骤,使它更清楚发生了什么.有关字符串转义和XSS保护的详细信息,请参见此Asciicast.
Mic*_*tum 16
使用原始:
<%=raw @str >
Run Code Online (Sandbox Code Playgroud)
但正如@ jmort253正确地说的那样,考虑HTML真正属于哪里.
您还可以使用simple_format(@str)它删除恶意代码.在这里阅读更多:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
您正在将业务逻辑与内容混合在一起.相反,我建议将数据发送到您的页面,然后使用类似JQuery的东西将数据放在您需要的地方.
这样做的好处是可以将HTML中的所有HTML保留在它所属的HTML页面中,这样您的Web设计人员就可以在以后修改HTML而无需通过服务器端代码.
或者,如果您不想使用JavaScript,可以试试这个:
@str = "Hi"
<b><%= @str ></b>
Run Code Online (Sandbox Code Playgroud)
至少这种方式你的HTML在它所属的HTML页面中.
或者你可以试试CGI.unescapeHTML方法.
CGI.unescapeHTML "<p>This is a Paragraph.</p>"
=> "<p>This is a Paragraph.</p>"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155001 次 |
| 最近记录: |