class StringTools::Sanitizer::Base

Constants

TAGS_WITHOUT_ATTRIBUTES
TAGS_WITH_ATTRIBUTES

Public Instance Methods

sanitize(str, attrs = {}) click to toggle source
# File lib/string_tools.rb, line 158
def sanitize(str, attrs = {})
  # для корректного обрезания utf строчек режем через mb_chars
  # для защиты от перегрузки парсера пропускаем максимум 1 мегабайт текста
  # длина русского символа в utf-8 - 2 байта, 1Мб/2б = 524288 = 2**19 символов
  # длина по символам с перестраховкой, т.к. латинские символы(теги, например) занимают 1 байт
  str = str.mb_chars.slice(0..(2**19)).to_s

  # Мерджим добавочные теги и атрибуты
  attributes = TAGS_WITH_ATTRIBUTES.merge(attrs)
  elements = attributes.keys | TAGS_WITHOUT_ATTRIBUTES

  transformers = [LINK_NORMALIZER]
  transformers << IframeNormalizer.new(attributes['iframe']) if attributes.key?('iframe')

  Sanitize.fragment(
    str,
    :attributes => attributes,
    :elements => elements,
    :css => {:properties => Sanitize::Config::RELAXED[:css][:properties]},
    :remove_contents => %w(style script),
    :allow_comments => false,
    :transformers => transformers
  )
end