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

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 17 2008, 17:19

例如:我想将网页中的广告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定义中的/是否有什么特殊用途?

User avatar
phoenix
Site Admin
Posts: 525
Joined: Dec 29 2007, 16:27

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

Post by phoenix » Jan 17 2008, 17:46

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的表达式中并无特殊含义。

Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

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

Post by Ray4 » Jan 18 2008, 10:48

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

nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 18 2008, 13:19

的确如楼上所说,我怀疑是AdList对过滤规则有特殊处理。

重新发一下图:
Image


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

nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 18 2008, 14:02

刚刚实验发现,不单单是在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

nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 18 2008, 14:05

大家能看到图片么?

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

User avatar
phoenix
Site Admin
Posts: 525
Joined: Dec 29 2007, 16:27

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

Post by phoenix » Jan 18 2008, 14:38

初步测试,似乎是Proxomitron的Hash处理有问题,试试在blockfile前加:

Code: Select all

# NoHash
真是太意外了。

nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 18 2008, 14:51

添加了
# NoHash
后,暂时还没发现问题。

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

User avatar
phoenix
Site Admin
Posts: 525
Joined: Dec 29 2007, 16:27

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

Post by phoenix » Jan 18 2008, 17:53

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是否仍有问题。

nikita_win
Posts: 7
Joined: Jan 17 2008, 17:00

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

Post by nikita_win » Jan 21 2008, 17:56

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


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

Post Reply