Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Экранирование HTML в представлении Rails 3

Автор вопроса: Alexey ZakharovОтветов: 1

Я использую Rails 3. Я хочу отобразить сгенерированный фрагмент html внутри шаблона erb.

<%= "<div>Foo Bar</div>" %>

Rails кодирует теги div.

Если я прав, в Rails 2 <%=h вызывает экранирование html. Кажется, это было изменено в Rails 3. Как можно вставить фрагмент html без кодирования в Rails 3?

С уважением, Алексей.

ruby-on-railsruby-on-rails-3xsserb

Ответы

Ответ 1 · рейтинг 19 · jigfox

Я предполагаю, что под кодировкой вы подразумеваете экранирование html:

Чтобы вывести необработанный html в Rails 3, вы можете использовать три разных подхода.

  1. вы можете использовать помощник raw для вывода необработанного html

    <% some_string = "<div>Hello World!</div>" %>
    <%= some_string %>
    <!-- outputs: &lt;div&gt;Hello Worlds!&lt;/div&gt; -->
    <%=raw some_string %>
    <!-- outputs: <div>Hello Worlds!</div> -->
    

    дополнительная информация: ActionView::Helpers::OutputSafetyHelper#raw

  2. Вы можете пометить строку как html_safe

    <% some_string = "<div>Hello World!</div>".html_safe %>
    <%= some_string %>
    <!-- outputs: <div>Hello World!</div> -->
    

    дополнительная информация: String#html_safe и ActiveSupport::SafeBuffer#new

  3. Вы можете очистить свой вывод с помощью sanitize

    <%=sanitize "<div>Hello World!</div>", tags: %w( div ) %>
    

    дополнительная информация: ActionView::Helpers::SanitizeHelper#sanitze

Еще немного информации:

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы