在使用 htmlparser1.6 分析一段Html时发现一个bug
这段html代码如下 (只提取了其中部分代码)
<HTML>
<head></head>
<body>
<P>
<!----------Start Sponsers------------------------------------------------------------------------------->
<table align="center" width="539" border="0" cellspacing="3" cellpadding="0"
bgcolor=ffffff height="127"><tr>
<td valign=top
colspan="2" width="529" height="15" bgcolor="#FFFFC6">
<a href="http://www.abc.com/" target="_blank" style="font-size: 12px;">web hosting</a>
<center>
<script type="text/javascript"><!--
//120x90, created 1/21/08
google_ad_width = 120;
google_ad_height = 90;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<P><a href="http://www.baidu.com">baidu</a>
</center>
<h6 align="center">Copyright </h6>
</body>
</HTML>
使用LinkTag来filter连接时,发现"Start Sponsers"注释行下面的http://www.abc.com/取不到。
跟了一下源代码,发现问题出在org.htmlparser.lexer.Lexer的parseRemark()函数上。其判断Remark注释结束标志的算法有问题。
我加了一个判断Remark结束的方法如下
public boolean isRemarkEnd(StringBuffer remarkTagEnd, char ch) {
remarkTagEnd.append(ch);
if (remarkTagEnd.length() == 4) {
remarkTagEnd.deleteCharAt(0);
}
return REMARK_END.equals(remarkTagEnd.toString());
}
如果判断出Remark结束标志则设置parseRemark()函数中的done = true;