我在Rails中使用Nokogiri解析我的HTML并将自闭合标签转换为常规标签。效果很好,但它也可以转换我们的模板标签[%%],例如:

html = "<a href='[% hello %]'>Hello from [% Us %]</a>"
Nokogiri::HTML::DocumentFragment.parse(html).to_html


将转换为:

<a href='%5B%%20hello%20%%5D'>Hello from [% Us %]</a>


转换后不使用gsub怎么避免?

这没有帮助:

html = "<a href='[% hello %]'>Hello from [% Us %]</a>"
doc = Nokogiri::HTML::Document.new
doc.encoding = 'UTF-8'
doc.fragment(html).to_html
#=> "<a href=\"%5B%%20hello%20%%5D\">Hello from [% Us %]</a>"

最佳答案

@anothermh实际上回答了我的问题(请参阅我的问题下方的评论)。我最终使用了他的建议(to_xml

但是,我在解析代码时需要的比我决定不提的要多。我需要能够将特殊字符保留在标签中,还需要将自闭合标签转换为常规标签。

我的解决方案是使用XHTML格式,如下所述:https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node/SaveOptions#FORMAT-constant

html = "... my html ..."
doc = Nokogiri::HTML::Document.new
doc.encoding = 'UTF-8'
final = doc.parse(html).to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML)

10-07 19:49
查看更多