返回列表 发帖

[TheWorld 3] 过滤扩展进阶应用笔记(2009.12.28 更新)

这个帖子本来就准备写的,前几天没能定下心来,就拖了几天

广告过滤功能,其实不仅仅是为了过滤广告,更重要的是为了改善我们的网页浏览体验,所以,过滤功能所能做到的也不仅仅是过滤广告,还有其他很多很多东西,这个需要大家慢慢发掘

这个帖子可以看做是教程贴的延续,在教程贴中我已经介绍了tw3过滤的最基本用法,以及tw3过滤规则里所有的参数,因为教程贴比较简单,很多参数都没有用上,所以才有了这个帖子,这个帖子的内容也只是对教程贴的补充,所以,对于已经掌握了教程贴的朋友,就可以更加深入的了解tw3的过滤,由于内容较多较杂,所以我会不定期的更新不同的内容。

_________________________________________________________________________________________

第一节:多重过滤
多重过滤是tw3的最大特色之一,有了多重过滤,使tw3的过滤相对于tw2来说有了质的飞跃

相信大家在教程贴里看到过多重过滤字样,但是在那个帖子里却没有任何说明,主要是因为基本的过滤应用对多重过滤的需求不是太大。作为进阶应用的第一节,我就给大家介绍一下多重过滤;
多重过滤,实际上对这个功能最直白的描述应该是多重匹配;在教程贴里,我用实例介绍了如果过滤掉页面中指定的区域,而在实际情况下,有些时候我们会遇到想要过滤的区域并不是唯一,或者没有很明显的标示,这个时候多重过滤就派上用场了,我们可以利用多重匹配功能,来准确定位我们想要过滤的内容,下面我举个例子;

本版昨天有位朋友发了个帖子,要过滤论坛签名,尤其是要过滤带图片的签名,我就拿这个做个列子介绍一下如何只过滤带图片的签名,而不过滤只有文字的签名

首先,我们看一下论坛签名部分的代码(这里以Discuz! 7为例)
  1. <div class="signatures" style="">
  2. <table cellpadding="0" cellspacing="0">
  3. <tbody><tr>
  4. <td>签名内容</td>
  5. </tr>
  6. </tbody></table>
  7. </div>
复制代码
我们可以看到,不管签名里是文字还是图片,代码都是这样的,不同的是签名内容部分,文字或者是图片,或者两者皆有
按照教程贴里的方法,我们很容易就能过滤整个签名部分,不区分文字还是图片,只要过滤掉属性为class="signatures"的div即可

但是那位朋友的理想目标是只过滤带有图片的签名,于是,我们看一下带有图片的签名代码
  1. <div class="signatures" style="">
  2. <table cellpadding="0" cellspacing="0">
  3. <tbody><tr>
  4. <td><img src=图片地址></td>
  5. </tr>
  6. </tbody></table>
  7. </div>
复制代码
很明显,有图片的签名代码中含有<img src=图片地址>这样的内容,于是我们知道,只要过滤带有<img src=图片地址>内容的属性为class="signatures"的div就能实现过滤掉带有图片的签名
这个时候就可以利用多重过滤的多层匹配功能,第一层我们匹配属性为class="signatures"的div标签,然后在这个基础上我们继续匹配含有<img src=图片地址>内容的标签,将它过滤掉
我们可以得出这样的规则(规则中所使用的方式跟教程贴有所不同,具体参数请参考教程贴一楼的文档说明):
  1. <pattern type="1">
  2.                                 <targets>
  3.                                         <param>
  4.                                                 <![CDATA[div]]>
  5.                                         </param>
  6.                                         <paramex>
  7.                                                 <![CDATA[signatures]]>
  8.                                         </paramex>
  9.                                 </targets>
  10.                                 <pattern type="3">
  11.                                         <targets>
  12.                                                 <param>
  13.                                                         <![CDATA[<img]]>
  14.                                                 </param>
  15.                                                 <replace>
  16.                                                         <![CDATA[<!--signatures with image-->]]>
  17.                                                 </replace>
  18.                                         </targets>
  19.                                 </pattern>
  20.                         </pattern>
复制代码
将这个规则加入相应的对应url地址,导入后我们访问相应url的Discuz! 7论坛的时候就会看到带有图片的签名档被过滤掉了,只留下带有文字的签名档

小结:多重过滤理论上是可以无限匹配,如果遇到2层匹配都无法确定的情况下可以增加第三层,直到准确定位到自己想要过滤的内容
~~~~~~~~~~
外篇 1
上面介绍了如何利用多重过滤来过滤包含图片的签名档,虽然已经达到目的,但是为了更好的浏览体验,我们是不是可以只过滤签名档中的图片,而保留签名档中的其他内容呢?这样做应该是最完善的方法,结论是肯定可以的,我首先提供一个可行的方法思路,tw3的过滤扩展相比tw2除了多重过滤以外,还有个很大的改进是正则引擎,对正则表达式有一定了解的朋友可以利用positive lookbehind准确定位到只在签名档中的图片代码,将这个图片代码过滤就完成了对签名档图片部分的过滤,而不会过滤掉其他内容,如果签名档中同时包含文字和图片,文字依然会保留,而图片会被过滤

~~~~~以上内容写于 2009.12.02~~~~~

adblock有他的优点,但是同样缺点也很明显,adblock从功能性上来说连tw2都比不上,何况现在的tw3呢?

有人说规则的编写比较复杂,其实这个是观看角度的问题,就拿教程贴中的例子,那么长一段代码中用户仅仅只需要 ...
elkay 发表于 2009-12-2 22:03 http://bbs.ioage.com/cn/images/common/back.gif

tw3的过滤确实比adblock强,强得只能过滤当前源文件中写的元素,用神马js写出来的元素统统都过滤不了。真厉害啊

TOP

提示: 作者被禁止或删除 内容自动屏蔽
http://valid.canardpc.com/cache/banner/2854499.png
新浪/腾讯/饭否@小蛐蛐   twitter @jiayiming
如有过滤规则需要更新,请尽量原帖反馈提醒。

TOP

变量这个地方比较难琢磨,最好有个更详细的教程什么的。你的腾讯规则我在好好看看。大E的pcpop我是没看懂。

TOP

提示: 作者被禁止或删除 内容自动屏蔽
http://valid.canardpc.com/cache/banner/2854499.png
新浪/腾讯/饭否@小蛐蛐   twitter @jiayiming
如有过滤规则需要更新,请尽量原帖反馈提醒。

TOP

明白多了,

不过变量那还是弄不明白,怎么把一个变量移动到另一个地方。

TOP

提示: 作者被禁止或删除 内容自动屏蔽
http://valid.canardpc.com/cache/banner/2854499.png
新浪/腾讯/饭否@小蛐蛐   twitter @jiayiming
如有过滤规则需要更新,请尽量原帖反馈提醒。

TOP

还是没弄好

[\s\S]正则表达式是什么意思

TOP

$pop$就是变量名称啊,就是匹配到的内容保存成一个名为$pop$的变量

pcpop的规则里就是把侧栏保存成一个变量以后再过滤掉,然后在选定的位置调用这个变量就把侧栏移动到选定的位置了
elkay 发表于 2009-12-29 16:32 http://bbs.ioage.com/cn/images/common/back.gif
这么说就明白一些了,我再好好看看。

TOP

[\s\S]我还明白,那$pop$是什么意思?代码我研究了半天也没弄明白pcpop里怎么把侧栏移到下面的。
april 发表于 2009-12-29 15:56 http://bbs.ioage.com/cn/images/common/back.gif


$pop$就是变量名称啊,就是匹配到的内容保存成一个名为$pop$的变量

pcpop的规则里就是把侧栏保存成一个变量以后再过滤掉,然后在选定的位置调用这个变量就把侧栏移动到选定的位置了

TOP

[\s\S]我还明白,那$pop$是什么意思?代码我研究了半天也没弄明白pcpop里怎么把侧栏移到下面的。

TOP

46# april


是这样,这里说的变量其实就是我们在过滤规则中匹配到的内容,我们可以在匹配到内容以后把这个保存成一个变量,在后面的规则中可以调用这个变量,也就是前面匹配到的内容。

[\s\S]这个是正则表达式,跟变量没有关系,在搜索匹配内容的时候跟过滤一样,并不是一定要用正则表达式的

TOP

返回列表