中文网页的编码方式主要有2种,GB2312和UTF-8。在GB2312方式中,一个汉字占用2个字节,而UTF-8方式中,一个汉字占用3个字节。如下图,当我们将“一”这个汉字分别用GB2312和UTF-8方式储存的时候,以16进制方式来看,它们的内容是不一样的。
在Proxomitron的配置文件中,一个汉字也是占用2个字节,所以我们可以直接过滤GB2312编码网页中的中文;另一方面,我们不能用2个字节去匹配3个字节,所以不能直接过滤UTF-8编码网页中的中文。
匹配
尽管Proxomitron的帮助文件没有提到,但它实际上提供了以16进制方式按字节匹配的能力,符号为[%xx]。
以上图为例,如果要匹配UTF-8编码的“一”字,表达式为:
Code: Select all
[%e4][%b8][%80]
显然,我们无法通过Proxomitron在UTF-8编码的网页中插入以3个字节为存储单位的汉字,但我们可以通过character entity的方式来达到我们的目的。关于character entity的知识,请自行google。
附件里我提供了一个工具,可以将UTF-8字符转换为character entity格式。
实例
以www.google.cn为例,以其中的“高级搜索”字符串为目标。 通过16进制工具,我们可以看到其16进制内容为: 相应的,匹配表达式应该写为:
Code: Select all
[%E9][%AB][%98][%E7][%BA][%A7][%E6][%90][%9C][%E7][%B4][%A2]
Code: Select all
不做恶
Code: Select all
[Patterns]
Name = "utf-8 demo"
Active = TRUE
URL = "$TYPE(htm)www.google.cn/"
Limit = 20
Match = "[%E9][%AB][%98][%E7][%BA][%A7][%E6][%90][%9C][%E7][%B4][%A2]"
Replace = "不做恶"