Допустим, я хочу очистить сгенерированный пользователем 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 для определенных тегов.
Может кто-нибудь пролить свет на способ достижения этого?