Очистить HTML и закрыть неполные теги - PullRequest
6 голосов
/ 30 марта 2012

sanitize() в ApplicationHelper не закрывает теги.

s = "<a href='http://example.com'>incomplete"
sanitize(s, :tags => ['a', 'p'])

Приведенный выше фрагмент оставляет строку как есть.Как я могу заставить его добавить закрывающую </a> или хотя бы полностью удалить <a>?

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Вы можете использовать правильный HTML-парсер, чтобы сделать это.Я бы порекомендовал Nokogiri для работы:

require 'nokogiri'
# ...
s = "<a href='http://example.com'>incomplete"
Nokogiri::HTML::fragment(sanitize(s, :tags => ['a', 'p'])).to_xml
# => "<a href=\"http://example.com\">incomplete</a>"

Это всегда будет возвращать действительный XML.Конечно, вы можете упаковать это в свой собственный вспомогательный метод для более легкого использования.

2 голосов
/ 03 октября 2015

Обновленный ответ:

 html = "<a href='http://example.com'>incomplete"
 html = sanitize(s, tags: %w[a p])
 Nokogiri::HTML::DocumentFragment.parse(html).to_html
...