13

我继承了以下字符串(我对格式无能为力):

 <iframe \n  class=\"some_class\"\n  type=\"text/html\" \n  src=\"/embed/iframe_content.html?id=tsqA5D7_z10\" \n  width=\"960\" \n  height=\"593\" \n  marginwidth=\"0\" \n  marginheight=\"0\" \n  frameborder=\"0\">\n</iframe>

我在这样的 erb 模板中渲染它:

<%= the_string %>

目前它呈现为如下文本:

&lt;iframe  class="some_class" type="text/html" src="/embed/iframe_content.html?id=tsqA5D7_z10" width="960" height="593"  marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

我需要将它呈现为 HTML。

我尝试了以下方法:

  1. <%= the_string.html_safe %> # 渲染字符串不变
  2. <%= CGI.unescapeHTML(the_string) %># 带有类型错误'can't dup NilClass'的错误
  3. <%= CGI.unescapeHTML(the_string).html_safe %># 带有类型错误'can't dup NilClass'的错误
  4. <%= raw the_string %># 渲染字符串不变

如何将此字符串呈现为 HTML?

4

5 回答 5

20

正如您似乎已经注意到的那样,您需要注意两件事:

  1. 取消转义 HTML 实体
  2. 在您的视图中打印原始 html

对于 2 号<%= raw ... %>应该可以正常工作。

数字 1CGI.unescapeHTML是正确的想法,但我认为它不能识别所有 HTML 实体,所以我建议查看HTML Entites gem

您也可以尝试使用simple_format辅助方法,但我认为您必须向它传递一些选项以允许<iframe>标记

我也强烈建议将您的unescaping逻辑转移到辅助方法中。

于 2012-05-21T00:09:45.133 回答
8

您正在转义的内容不能是字符串,这就是您收到带有类型错误的错误的原因can't dup NilClass

尝试做
s = String.new your_obj.to_s

现在做

CGI.unescapeHTML(s)

于 2013-04-21T17:35:32.000 回答
4

最后我不得不使用 Matthew 建议的HTMLEntities Gem;

  1. 使用 RVM 安装 gem 并将其添加到我的 Gemfile

  2. 在我的 application.rb 中需要它

  3. 以下是我可以让它正确渲染的唯一方法。请注意围绕 the_string 的额外单引号。没有它们,尖括号不会呈现,尽管其他一切都会呈现。

    coder = HTMLEntities.new
    raw coder.decode("'"+the_string+"'")
    
于 2012-05-21T01:34:51.300 回答
1

你可以试试这个:

<%= raw the_string %>
于 2012-05-20T23:01:19.517 回答
1

第 3 版听起来很有价值。您不使用 the_string 的任何原因?

<%= raw CGI.unescapeHTML(the_string) %>

于 2012-05-20T23:30:16.447 回答