Невыход 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 %>


В данный момент он представляет собой такой текст:



&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. <%= the_string.html_safe %> # выводит строку без изменений


  2. <%= CGI.unescapeHTML(the_string) %> # ошибки с ошибкой типа 'can't dup NilClass'


  3. <%= CGI.unescapeHTML(the_string).html_safe %> # ошибки типа Error ' can't dup NilClass '


  4. <%= raw the_string %> # выводит строку без изменений


Как я могу представить эту строку в виде HTML?

574   5  

5 ответов:

Как вы, кажется, заметили, есть две вещи, о которых вам нужно позаботиться:

  1. Unescaping HTML entities
  2. печать необработанного 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, предложенный Мэтью;

  1. Установил gem с помощью RVM и добавил его в мой Gemfile

  2. Требовалось это в моем заявлении.rb

  3. Следующее было единственным способом, которым я мог заставить его правильно отрисоваться. Обратите внимание на дополнительные одинарные кавычки, обернутые вокруг строки the_string. Без них угловые скобки не визуализируются, хотя все остальное делает это.

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

Вы можете попробовать это:

<%= raw the_string %>

Версия 3 звучит ценно. Есть причины, по которым вы не используете the_string?

<%= raw CGI.unescapeHTML(the_string) %>

Comments

    Ничего не найдено.