Spec-Zone.ru › Ruby on Rails 4.2

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

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

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

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

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

Также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использования кодовых ссылок Unicode, 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 allowed_node?(node)
    !%w(form script comment blockquote).include?(node.name)
  end

  def skip_node?(node)
    node.text?
  end

  def scrub_attribute?(name)
    name == 'style'
  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 88
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 116
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_tags(html) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 102
def strip_tags(html)
  self.class.full_sanitizer.sanitize(html, encode_special_chars: false)
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!

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

Spec-Zone.ru

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