格式良好的<script> Javascript </script>标签在STRICT模式下混淆了Nokogiri :: HTML

时间:2018-04-05 23:37:32

标签: javascript html ruby nokogiri libxml2

以下是说明问题的测试用例:

def test_strict_Nokogiri
  html = "<script> $('<a></a>') </script>"  
  doc = Nokogiri::HTML(html, nil, nil, Nokogiri::XML::ParseOptions::STRICT)  
  assert_empty doc.errors
end

该断言失败,因为有errors#<Nokogiri::XML::SyntaxError: Unexpected end tag : a>

即使Nokogiri一直在<script>标记内查找HTML标记,也应该看到<a ...></a>标记是平衡的,对吗?

如何让Nokogiri识别有效的HTML,绕过嵌入式Javascript,只会抱怨它真的坏了?

编辑:我已将错误传递给libxml2维护者:https://bugzilla.gnome.org/show_bug.cgi?id=795390

1 个答案:

答案 0 :(得分:0)

如果你想从Nokogiri元素中删除脚本标签,你可以这样做,

html = '<div> Hello </div> <script> $("<div></div>") </script>'
doc = Nokogiri::HTML(html, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
doc.text # " Hello   $(\"<div>\") "
doc.xpath('//script').remove
doc.text # " Hello  "

doc.to_html将返回此

"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n<div> Hello </div> </body></html>\n"