Rails::HTML Sanitizer: имитировать конфигурацию CConfredOredConContent, указав атрибуты и классы CSS для каждого тега
Допустим, я хочу очистить сгенерированный пользователем HTML, написанный CKEDITOR или что-то подобное.
CKEDITOR имеет действительно хороший синтаксис, похожий на хэш, для разрешения содержимого:
config.allowedContent = {
a: {
attributes: 'href'
},
b: true,
i: true,
u: true,
table: true,
tbody: true,
tr: true,
td: true,
blockquote: true,
img: {
attributes: [ '!src', 'alt', 'width', 'height' ],
classes: [ 'align-left', 'align-center', 'align-right' ],
},
h1: true,
h2: true,
h3: true,
ul: true,
li: true,
ol: true,
figure: true,
figcaption: true,
};
Это работает так:
- разрешены только теги в списке;
- если значение тега
true
все атрибуты и классы разрешены для этого тега HTML; в противном случае вы можете передать объект, указывающий, какие классы и атрибуты вы хотите разрешить для этого конкретного тега.
Я в основном хочу повторить это в бэкэнде с Rails HTML Sanitizer.
В настоящее время у меня есть простой PermitScrubber:
class BlogPostScrubber < Rails::Html::PermitScrubber
def initialize
super
self.tags = %w(
p
a
b
i
u
table
tbody
tr
td
blockquote
img
h1
h2
h3
ul
li
ol
figure
figcaption
)
end
end
Проблема: если я укажу @attributes
в PermitScrubber это разрешит эти атрибуты для любого элемента; Кроме того, я не знаю, как разрешить только определенные классы CSS для определенных тегов.
Может ли кто-нибудь пролить свет на способ достижения этого?