【问题标题】:Unescaping HTML string转义 HTML 字符串
【发布时间】:2012-05-27 12:28:59
【问题描述】:

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

 <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. &lt;%= the_string.html_safe %&gt; # 保持字符串不变
  2. &lt;%= CGI.unescapeHTML(the_string) %&gt; # 类型错误 'can't dup NilClass' 的错误
  3. &lt;%= CGI.unescapeHTML(the_string).html_safe %&gt; # 类型错误“无法复制 NilClass”的错误
  4. &lt;%= raw the_string %&gt; # 保持字符串不变

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

【问题讨论】:

    标签: html escaping


    【解决方案1】:

    您要转义的内容不能是字符串,这就是为什么您会收到类型错误 can't dup NilClass 的错误

    试试看
    s = String.new your_obj.to_s

    现在做

    CGI.unescapeHTML(s)

    【讨论】:

    • 在控制器中工作?这是正确的答案,但你必须更改 to_s -> to_str。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      对于 2 号 &lt;%= raw ... %&gt; 应该可以正常工作。

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

      您也可以尝试使用 simple_format 辅助方法,但我认为您必须为其传递一些选项以允许使用 &lt;iframe&gt; 标记

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

      【讨论】:

      • 感谢这些建议。我去看看。
      • 再次感谢。 HTML Entites gem 就是答案。
      【解决方案4】:

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

      &lt;%= raw CGI.unescapeHTML(the_string) %&gt;

      【讨论】:

      • 正如我在问题中提到的,它失败并出现错误 Type Error 'can't dup NilClass'
      • 对不起。你说得对。但不是。结果相同:类型错误'can't dup NilClass'
      • CGI.unescapeHTML 对 String 没有问题,请确定 the_string.is_a?(String)
      【解决方案5】:

      你可以试试这个:

      <%= raw the_string %>
      

      【讨论】:

      • 感谢您的建议,但对字符串没有影响。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2015-09-27
      • 2012-04-11
      • 2020-03-14
      相关资源
      最近更新 更多