Rails 如何转义和显示渲染视图的内容

Posted

技术标签:

【中文标题】Rails 如何转义和显示渲染视图的内容【英文标题】:Rails How to escape and display the contents of a rendered view 【发布时间】:2010-10-25 21:08:30 【问题描述】:

我正在尝试在文本区域中显示 Rails 视图文件。视图文件包含一堆 html,我想将其转义,以免干扰页面 html。这是一个例子:

In this view we are going to display the contents of a partial
<textarea>
<%= html_escape render('partial') %>
</textarea>

并且在 partial.html.erb 我会拥有

Hello this is partial.html.erb and this is a 
<textarea>textarea</textarea>  blah blah blah.

问题是:partial.html 中的 textarea 破坏了第一个视图中的 textarea,因为它没有被 html_escaped。如何在 textarea 中进行属性转义并显示部分内容?

【问题讨论】:

【参考方案1】:

你尝试过使用

<%= CGI.escapeHTML render('partial') %>

【讨论】:

刚刚发现这个:,这能解决吗?您也可以尝试将 CGI.escapeHTML 与 render_to_string 一起使用。【参考方案2】:

在您的控制器中尝试render_to_string,然后在结果字符串上使用html_escape

【讨论】:

不行,还是不行。 html_escape 无法转义 render_to_string 返回的内容【参考方案3】:

好的 - 我想通了。您基本上必须调用两次渲染。第一次是渲染文件,第二次是转义渲染的文件。这太丑了!

<%= render :text => render("partial") %>

我很想看看是否还有其他人有任何其他方法可以逃避 partial.html。

【讨论】:

【参考方案4】:

你好 我看到这是很久以前的事了,但我建议在这里: ...清理instance.yourtext %> 我在 S.Ruby、D.Thomas 和 D.Hansson 的“使用 Ruby on Rails 进行敏捷网页设计”中找到了“清理”助手。 希望对你有帮助...

【讨论】:

【参考方案5】:

已编辑 默认情况下,在 Rails 中, text_area 会转义 HTML 以避免恶意脚本嵌入。使用表单助手创建您的 &lt;textarea&gt;

<%= f.text_area :model_attribute %>

注意:如果您需要在文本区域中查看原始 HTML,只需包含 :escape 参数并将值设置为 false 以禁用 HTML 转义。

<%= f.text_area :model_attribute, escape: false %>

引用:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-text_area_tag

如果使用此功能,如果来源不受信任或不向公众开放,我建议从提交的值中验证或消除脚本标签。

【讨论】:

以上是关于Rails 如何转义和显示渲染视图的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何从转义闭包中获取值并将其分配给变量并在表格视图中显示

如何防止 Rails 在我看来转义我的撇号?

如何对字符串进行 HTML 编码/转义?有内置的吗?

用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义

JS实现HTML标签转义及反转义

如何正确转义过滤的内容变量?