Page 1 of 2

以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 17 2008, 17:19
by nikita_win
例如:我想将网页中的广告iframe替换为"<!-- 被清除的iframe广告 -->"这个字符串,iframe代码:
<iframe src="http://ivy.pconline.com.cn/adpuba/show? ... media=html" marginwidth="0" marginheight="0" align="left" frameborder="0" height="280" scrolling="no" width="320">广告:ad_top</iframe>

1.首先在HTML Web Page Filters中添加Filter
Bounds Match:
$NEST(<iframe*>,</iframe>)
Byte Limit:
1000
Matching Expression:
$LST(AdList)
Replacement Text:
<!-- 被清除的iframe广告 -->

2.在AdList中添加过滤规则:
*ivy.pconline.com.cn/adpuba/*

3.点击Fitler配置中的Test Filter,Test结果为[No Match]

4.如果将AdList中的过滤规则改为:
*ivy.pconline.com.cn*adpuba/*
或者
*(ivy.pconline.com.cn/adpuba)/*
或者
*(ivy.pconline.com.cn/adpuba/)*
则Test结果均为正常:
<!-- 被清除的iframe广告 -->

5.但过滤规则中类似于
*/advertise/*
*/ggao/*

这些规则都没有问题。

最不明白的地方就是第四步当中出现的情况,是否斜线(/)在过滤规则中有特殊意义,或者包含点(.)的过滤规则有什么特殊说法,查了软件附带的说明文件,也到google里搜了不少,还是没有得到满意的答案。
不知道哪位高手能指点迷津,说明一下List定义中的/是否有什么特殊用途?

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 17 2008, 17:46
by phoenix
nikita_win wrote: 2.在AdList中添加过滤规则:
*ivy.pconline.com.cn/adpuba/*

3.点击Fitler配置中的Test Filter,Test结果为[No Match]
我直接将*ivy.pconline.com.cn/adpuba/*写到Matching Expression窗口,或者放到blockfile中测试都是成功的。
请确保你保存了blockfile文件,并执行了Reload Edited Lists菜单命令。

“.”和“/”在proxomitron的表达式中并无特殊含义。

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 10:48
by Ray4
在我这里重现了,你用的是url killfile.txt,一开始我用的是专门收集iframe的文件过滤的,用*ivy.pconline.com.cn/adpuba/*过滤,可以正常过滤,但放到和你一样的blocklist里,则不行,看起来好像是因为blocklist的问题,不过说不通。
再测试,发现问题是出在开头的*号上面,把它换成\1,可以正常过滤,换成**也可以正常过滤。或者用*\1也成,这时*号没有匹配任何字符。或者用*ne.com.cn/adpuba/*来匹配,也可过滤。这些测试都在url killfile.txt里进行。
只知道这么多了,具体原因还不知道。

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 13:19
by nikita_win
的确如楼上所说,我怀疑是AdList对过滤规则有特殊处理。

重新发一下图:
Image


×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
第二张
Image

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 14:02
by nikita_win
刚刚实验发现,不单单是在AdList(URL Killfile.txt)中有这个问题,有些自建的过滤列表文件也有这个问题:
我建立一个过滤列表文件名为:"ad js.txt",其中添加过滤规则:
*adv.pconline.com.cn/adpuba/*
并将“ad js.txt”加入过滤列表名为“adjs”。
然后在“HTML Web Page Filters”中添加“ad Javascript to blank”过滤器,过滤器定义如下:
Bounds Match:
$NEST(<script*>,</script>)

Byte Limit:
1000

Matching Expression:
$LST(adjs)

Replacement Text:
<!-- 广告Javascript过滤 -->

点击Test Filter测试:过滤下列HTML代码:
<td style="border: 1px solid rgb(0, 0, 0);" align="center" width="744"><script src="http://adv.pconline.com.cn/adpuba/show? ... pt><object mediawrapchecked="true" type="application/x-shockwave-flash" data="http://img1.pconline.com.cn/ivy/image/2 ... 903765.swf" wmode="opaque" height="90" width="744"></object><div style="overflow: hidden; height: 2px;"></div></td>

结果:
[No Match]

如果将ad js.txt中的过滤规则改为:
**adv.pconline.com.cn/adpuba/*
或者
*(adv.pconline.com.cn/)adpuba/*
则过滤成功,过滤结果为:
<td style="border: 1px solid rgb(0, 0, 0);" align="center" width="744"><!-- 广告Javascript过滤 --><object mediawrapchecked="true" type="application/x-shockwave-flash" data="http://img1.pconline.com.cn/ivy/image/2 ... 903765.swf" wmode="opaque" height="90" width="744"></object><div style="overflow: hidden; height: 2px;"></div></td>

下面附图:
我的Blockfile List设置
Image

加括号正常过滤
Image

普通通配符定义,无法正常过滤
Image

加**正常过滤
Image

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 14:05
by nikita_win
大家能看到图片么?

论坛好像对图片宽度有限制,请将图片在新窗口中打开,就能看到完整图片了。

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 14:38
by phoenix
初步测试,似乎是Proxomitron的Hash处理有问题,试试在blockfile前加:

Code: Select all

# NoHash
真是太意外了。

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 14:51
by nikita_win
添加了
# NoHash
后,暂时还没发现问题。

如果不用Hash是不是会降低过滤效率???

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 18 2008, 17:53
by phoenix
nikita_win wrote:如果不用Hash是不是会降低过滤效率???
NoHash eliminates all hashing and can save memory for list that are seldom called or where speed isn't an issue.
以现在的cpu速度,应该不是问题。另外,不用Hash能节省内存,不过以现在的内存容量,意义也不大。
Keep in mind leading wildcards are always slower and should be avoided if possible (particularly in web filter bounds checks).
所以,如果你将“*”写到表达式里,比如:

Code: Select all

*$LST(adjs)*
然后blockfile里不使用“*”,效率会更高,你测试下这种情况的hash是否仍有问题。

Re: 以通配符(*)开始的过滤项,如果其中含有/则过滤有问题,请看内容。

Posted: Jan 21 2008, 17:56
by nikita_win
将“*”写到表达式里,Ad List中不以通配符开始,的确可以。但是真的能提高效率么?
*$LST(adjs)*


比对过程应该和在Ad List中所有规则前后添加通配符一样的吧?