取消HTML字符串

Und*_*ion 11 html escaping

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

 <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>
Run Code Online (Sandbox Code Playgroud)

我在这样的erb模板中呈现它:

<%= the_string %>
Run Code Online (Sandbox Code Playgroud)

目前它呈现为这样的文本:

&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;
Run Code Online (Sandbox Code Playgroud)

我需要将其呈现为HTML.

我尝试过以下方法:

  1. <%= the_string.html_safe %> #渲染字符串不变
  2. <%= CGI.unescapeHTML(the_string) %> #类型错误的错误'不能重复NilClass'
  3. <%= CGI.unescapeHTML(the_string).html_safe %> #类型错误的错误'不能重复NilClass'
  4. <%= raw the_string %> #渲染字符串不变

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

Mat*_*hew 18

您似乎已经注意到,您需要注意两件事:

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

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

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

您也可以尝试使用simple_format帮助器方法,但我认为您将不得不为它传递一些选项以允许<iframe>标记

我也强烈建议将你的unescaping逻辑转换为辅助方法.


小智 8

你是什​​么unescaping一定不能是一个字符串,这就是为什么你得到一个类型错误的错误 can't dup NilClass

试着做
s = String.new your_obj.to_s

现在做

CGI.unescapeHTML(s)