转义HTML字符串(Unescaping HTML string)

2019-06-24 15:14发布

我已经继承了以下字符串(我也没有办法左右格式):

 <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) %> #错误与类型错误'不能DUP NilClass'
  3. <%= CGI.unescapeHTML(the_string).html_safe %> #错误与类型错误'不能DUP NilClass'
  4. <%= raw the_string %> #呈现未变化的字符串

我怎样才能使这个字符串作为HTML?

Answer 1:

你似乎已经注意到了,有需要照顾的两件事情:

  1. 在反向转义HTML实体
  2. 打印视图中的原始HTML

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

对于1号CGI.unescapeHTML是正确的想法,但我不认为它承认所有的HTML实体,所以我会建议采取一看的HTML实体宝石

您也可以尝试使用simple_format的辅助方法,但我认为你将不得不通过它的一些选项,它允许<iframe>标签

我也强烈建议将您的unescaping逻辑放到一个辅助方法。



Answer 2:

你所进行反向转义不能是一个字符串,这就是为什么你正在用错误类型错误can't dup NilClass

试着做
s = String.new your_obj.to_s

现在做

CGI.unescapeHTML(s)



Answer 3:

最后,我不得不使用ヶ辆马修建议宝石;

  1. 安装了RVM宝石,并将其添加到我的Gemfile

  2. 在我的application.rb中所需的IT

  3. 以下是我能得到它的正确呈现的唯一途径。 请注意额外的单引号the_string包裹。 如果没有他们的尖括号不渲染,但一切一样。

     coder = HTMLEntities.new raw coder.decode("'"+the_string+"'") 


Answer 4:

你可以试试这个:

<%= raw the_string %>


Answer 5:

第3版的声音是有价值的。 你为什么不使用the_string任何理由吗?

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



文章来源: Unescaping HTML string
标签: html escaping