这个帖子本来就准备写的,前几天没能定下心来,就拖了几天
广告过滤功能,其实不仅仅是为了过滤广告,更重要的是为了改善我们的网页浏览体验,所以,过滤功能所能做到的也不仅仅是过滤广告,还有其他很多很多东西,这个需要大家慢慢发掘
这个帖子可以看做是教程贴的延续,在教程贴中我已经介绍了tw3过滤的最基本用法,以及tw3过滤规则里所有的参数,因为教程贴比较简单,很多参数都没有用上,所以才有了这个帖子,这个帖子的内容也只是对教程贴的补充,所以,对于已经掌握了教程贴的朋友,就可以更加深入的了解tw3的过滤,由于内容较多较杂,所以我会不定期的更新不同的内容。
_________________________________________________________________________________________
第一节:多重过滤
多重过滤是tw3的最大特色之一,有了多重过滤,使tw3的过滤相对于tw2来说有了质的飞跃
相信大家在教程贴里看到过多重过滤字样,但是在那个帖子里却没有任何说明,主要是因为基本的过滤应用对多重过滤的需求不是太大。作为进阶应用的第一节,我就给大家介绍一下多重过滤;
多重过滤,实际上对这个功能最直白的描述应该是多重匹配;在教程贴里,我用实例介绍了如果过滤掉页面中指定的区域,而在实际情况下,有些时候我们会遇到想要过滤的区域并不是唯一,或者没有很明显的标示,这个时候多重过滤就派上用场了,我们可以利用多重匹配功能,来准确定位我们想要过滤的内容,下面我举个例子;
本版昨天有位朋友发了个帖子,要过滤论坛签名,尤其是要过滤带图片的签名,我就拿这个做个列子介绍一下如何只过滤带图片的签名,而不过滤只有文字的签名
首先,我们看一下论坛签名部分的代码(这里以Discuz! 7为例)- <div class="signatures" style="">
- <table cellpadding="0" cellspacing="0">
- <tbody><tr>
- <td>签名内容</td>
- </tr>
- </tbody></table>
- </div>
复制代码 我们可以看到,不管签名里是文字还是图片,代码都是这样的,不同的是签名内容部分,文字或者是图片,或者两者皆有
按照教程贴里的方法,我们很容易就能过滤整个签名部分,不区分文字还是图片,只要过滤掉属性为class="signatures"的div即可
但是那位朋友的理想目标是只过滤带有图片的签名,于是,我们看一下带有图片的签名代码- <div class="signatures" style="">
- <table cellpadding="0" cellspacing="0">
- <tbody><tr>
- <td><img src=图片地址></td>
- </tr>
- </tbody></table>
- </div>
复制代码 很明显,有图片的签名代码中含有<img src=图片地址>这样的内容,于是我们知道,只要过滤带有<img src=图片地址>内容的属性为class="signatures"的div就能实现过滤掉带有图片的签名
这个时候就可以利用多重过滤的多层匹配功能,第一层我们匹配属性为class="signatures"的div标签,然后在这个基础上我们继续匹配含有<img src=图片地址>内容的标签,将它过滤掉
我们可以得出这样的规则(规则中所使用的方式跟教程贴有所不同,具体参数请参考教程贴一楼的文档说明):- <pattern type="1">
- <targets>
- <param>
- <![CDATA[div]]>
- </param>
- <paramex>
- <![CDATA[signatures]]>
- </paramex>
- </targets>
- <pattern type="3">
- <targets>
- <param>
- <![CDATA[<img]]>
- </param>
- <replace>
- <![CDATA[<!--signatures with image-->]]>
- </replace>
- </targets>
- </pattern>
- </pattern>
复制代码 将这个规则加入相应的对应url地址,导入后我们访问相应url的Discuz! 7论坛的时候就会看到带有图片的签名档被过滤掉了,只留下带有文字的签名档
小结:多重过滤理论上是可以无限匹配,如果遇到2层匹配都无法确定的情况下可以增加第三层,直到准确定位到自己想要过滤的内容
~~~~~~~~~~
外篇 1
上面介绍了如何利用多重过滤来过滤包含图片的签名档,虽然已经达到目的,但是为了更好的浏览体验,我们是不是可以只过滤签名档中的图片,而保留签名档中的其他内容呢?这样做应该是最完善的方法,结论是肯定可以的,我首先提供一个可行的方法思路,tw3的过滤扩展相比tw2除了多重过滤以外,还有个很大的改进是正则引擎,对正则表达式有一定了解的朋友可以利用positive lookbehind准确定位到只在签名档中的图片代码,将这个图片代码过滤就完成了对签名档图片部分的过滤,而不会过滤掉其他内容,如果签名档中同时包含文字和图片,文字依然会保留,而图片会被过滤
~~~~~以上内容写于 2009.12.02~~~~~ |