清理HTML并关闭不完整的标签

mah*_*off 6 html ruby ruby-on-rails sanitize ruby-on-rails-3.1

sanitize()ApplicationHelper不关闭标签.

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

上面的代码片段保留了字符串.我怎么能强迫它附加一个关闭</a>或至少剥离<a>完全?

Nik*_* B. 5

您可以使用正确的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>"
Run Code Online (Sandbox Code Playgroud)

这将始终返回有效的XML.当然,您可以将其打包到您自己的帮助方法中,以便于使用.


jvn*_*ill 2

更新后的答案是

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