Невыход HTML-строку
У меня есть унаследованная следующая строка (я ничего не могу сделать с форматом):
<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) %># ошибки с ошибкой типа 'can't dup NilClass'
<%= CGI.unescapeHTML(the_string).html_safe %># ошибки типа Error ' can't dup NilClass '
<%= raw the_string %># выводит строку без изменений
Как я могу представить эту строку в виде HTML?
5 ответов:
Как вы, кажется, заметили, есть две вещи, о которых вам нужно позаботиться:
- Unescaping HTML entities
- печать необработанного html в вашем представлении
Для числа 2
<%= raw ... %>должно работать нормально.Для числа 1
CGI.unescapeHTMLбыла правильная идея, но я не думаю, что он распознает все HTML-сущности, поэтому я бы рекомендовал взглянуть на HTML Entites gemВы также можете попробовать использовать вспомогательный методsimple_format , но я думаю, что вы придется передать ему некоторые опции, чтобы он разрешил тег
<iframe>Также я настоятельно рекомендую переместить вашу логику
unescapingв вспомогательный метод.
То, что вы распаковываете, не должно быть строкой, и именно поэтому вы получаете ошибки с ошибкой типа
can't dup NilClassПопробуйте сделать
s = String.new your_obj.to_sТеперь
CGI.unescapeHTML(s)
В конце концов мне пришлось использовать HTMLEntities Gem, предложенный Мэтью;
Установил gem с помощью RVM и добавил его в мой Gemfile
Требовалось это в моем заявлении.rb
Следующее было единственным способом, которым я мог заставить его правильно отрисоваться. Обратите внимание на дополнительные одинарные кавычки, обернутые вокруг строки the_string. Без них угловые скобки не визуализируются, хотя все остальное делает это.
coder = HTMLEntities.new raw coder.decode("'"+the_string+"'")
Версия 3 звучит ценно. Есть причины, по которым вы не используете the_string?
<%= raw CGI.unescapeHTML(the_string) %>
Comments