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

时间:2012-03-29 20:51:01

标签: html ruby-on-rails ruby ruby-on-rails-3.1 sanitize

<{1}}中的{p> sanitize()未关闭代码。

ApplicationHelper

上面的代码片段保留了字符串。我怎么能强迫它附加一个结束s = "<a href='http://example.com'>incomplete" sanitize(s, :tags => ['a', 'p']) 或者至少剥离</a>

2 个答案:

答案 0 :(得分: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>"

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

答案 1 :(得分:2)

更新的答案是

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