Spec-Zone.ru › Ruby on Rails 5.1

модуль ActionView::Helpers::SanitizeHelper

Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших файлах шаблонов.

Публичные методы экземпляра

sanitize(html, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 80
def sanitize(html, options = {})
  self.class.white_list_sanitizer.sanitize(html, options).try(:html_safe)
end

Очищает входной HTML, удаляя все теги и атрибуты, которые не включены в белый список.

Также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использовать ссылки на символы Юникода, ASCII и шестнадцатеричные для обхода этих фильтров протоколов. Все специальные символы будут экранированы.

По умолчанию используется очиститель Rails::Html::WhiteListSanitizer. См. Rails HTML Sanitizers для получения дополнительной информации.

Также могут быть предоставлены пользовательские правила очистки.

Обратите внимание, что очистка предоставленного пользователем текста не гарантирует, что полученный разметка будет валидной или даже хорошо сформированной.

Параметры

  • :tags — массив разрешённых тегов.

  • :attributes — массив разрешённых атрибутов.

  • :scrubber — объект Rails::Html scrubber или Loofah::Scrubber, определяющий пользовательские правила очистки. Пользовательский очиститель имеет приоритет над пользовательскими тегами и атрибутами.

Примеры

Нормальное использование:

<%= sanitize @comment.body %>

Предоставление пользовательских тегов и атрибутов в белом списке:

<%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>

Предоставление пользовательского Rails::Html scrubber:

class CommentScrubber < Rails::Html::PermitScrubber
  def initialize
    super
    self.tags = %w( form script comment blockquote )
    self.attributes = %w( style )
  end

  def skip_node?(node)
    node.text?
  end
end

<%= sanitize @comment.body, scrubber: CommentScrubber.new %>

См. Rails HTML Sanitizer для документации по Rails::Html scrubbers.

Предоставление пользовательского Loofah::Scrubber:

scrubber = Loofah::Scrubber.new do |node|
  node.remove if node.name == 'script'
end

<%= sanitize @comment.body, scrubber: scrubber %>

См. документацию Loofah для получения дополнительной информации об определении пользовательских объектов Loofah::Scrubber.

Для установки по умолчанию разрешенных тегов или атрибутов во всем приложении:

# In config/application.rb
config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a']
config.action_view.sanitized_allowed_attributes = ['href', 'title']
sanitize_css(style) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 85
def sanitize_css(style)
  self.class.white_list_sanitizer.sanitize_css(style)
end

Очищает блок CSS-кода. Используется sanitize при обнаружении атрибута style.

strip_links(html) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 119
def strip_links(html)
  self.class.link_sanitizer.sanitize(html)
end

Удаляет все теги ссылок из html, оставляя только текст ссылки.

strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails

strip_links('Please e-mail me at <a href="mailto:me@email.com">me@email.com</a>.')
# => Please e-mail me at me@email.com.

strip_links('Blog: <a href="http://www.myblog.com/" class="nav" target=\"_blank\">Visit</a>.')
# => Blog: Visit.

strip_links('<<a href="https://example.org">malformed & link</a>')
# => &lt;malformed &amp; link
strip_tags(html) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 102
def strip_tags(html)
  self.class.full_sanitizer.sanitize(html)
end

Удаляет все HTML-теги из html, включая комментарии и специальные символы.

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!

strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more here</a>...")
# => Bold no more!  See more here...

strip_tags("<div id='top-bar'>Welcome to my website!</div>")
# => Welcome to my website!

strip_tags("> A quote from Smith & Wesson")
# => &gt; A quote from Smith &amp; Wesson

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API