我继承了以下字符串(我对格式无能为力):
<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 %>
目前它呈现如下文字:
<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"></iframe>
我需要将其呈现为HTML。
我尝试了以下内容:
<%= the_string.html_safe %>
#呈现字符串不变<%= CGI.unescapeHTML(the_string) %>
#带有类型错误的错误'无法复制NilClass'<%= CGI.unescapeHTML(the_string).html_safe %>
#带有类型错误的错误'无法复制NilClass'<%= raw the_string %>
#呈现字符串不变如何将此字符串呈现为HTML?
答案 0 :(得分:18)
正如您似乎注意到的那样,您需要注意两件事:
对于数字2 <%= raw ... %>
应该可以正常工作。
对于数字1 CGI.unescapeHTML
是正确的想法,但我认为它不会识别所有HTML实体,因此我建议您查看HTML Entites gem
您也可以尝试使用simple_format辅助方法,但我认为您必须为其传递一些选项以允许<iframe>
标记
我也强烈建议将你的unescaping
逻辑转换为辅助方法。
答案 1 :(得分:8)
你的unescaping不能是一个字符串,这就是为什么你会遇到类型错误can't dup NilClass
的错误
尝试做
s = String.new your_obj.to_s
现在做
CGI.unescapeHTML(s)
答案 2 :(得分:4)
最后我不得不使用马修建议的HTMLEntities宝石;
使用RVM安装gem并将其添加到我的Gemfile
在我的application.rb
以下是我能正确渲染它的唯一方法。请注意围绕the_string包含的额外单引号。没有它们,尖括号不会渲染,尽管其他一切都可以。
coder = HTMLEntities.new raw coder.decode("'"+the_string+"'")
答案 3 :(得分:1)
你可以试试这个:
<%= raw the_string %>
答案 4 :(得分:1)
版本3听起来很有价值。您没有使用the_string的原因是什么?
<%= raw CGI.unescapeHTML(the_string) %>