I have the inherited the following string (I can do nothing about the format):
<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>
I am rendering it in an erb template like this:
<%= the_string %>
At the moment it renders as text like this:
<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>
I need to render it as HTML.
I have tried the following:
<%= the_string.html_safe %># Renders the string unchanged<%= CGI.unescapeHTML(the_string) %># Errors with a Type Error ‘can’t dup NilClass’<%= CGI.unescapeHTML(the_string).html_safe %># Errors with a Type Error ‘can’t dup NilClass’<%= raw the_string %># Renders the string unchanged
How can I render this string as HTML?
As you seem to have noticed, there are two things you need to take care of:
For number 2
<%= raw ... %>should work fine.For number 1
CGI.unescapeHTMLwas the right idea, but I don’t think it recognizes all HTML entities so I would recommend taking a look at the HTML Entites gemYou can also try and use the simple_format helper method, but I think you are going to have to pass it some options for it to allow the
<iframe>tagalso I would strongly suggest moving your
unescapinglogic into a helper method.