htmlparser在分析RemarkNode注释时的bug

解析HTML时遇到Bug,注释导致链接无法正确提取。通过修改Remark结束判断逻辑解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值