轻松过滤论坛防复制干扰码
技术与开发
把论坛帖子上的文字复制到文档中时,如果出现了大量不规则的乱码,肯定十分恼火。那如何过滤掉防复制干扰字符?看了本文,你一定会豁然开朗。
打开网页的源代码,在每一行的后面都可以发现有语句“<span style="DISPLAY: none">*****</span>”,其中“****”处是不规则的字符。如何去掉这些干扰字符呢?虽然每一行后的干扰字符都没有任何规律,但这些字符却都处于“<span style="DISPLAY: none">”和“</span>”之间。
那么,只要截取出每一个“<span style="DISPLAY: none">*****</span>”字段,然后再将截取出的“<span style="DISPLAY: none">*****</span>”字段替换为空,就可以过滤掉干扰字符了。
小提示:代码中“<span>”指的是内嵌文本容器,它和“<Div>”一样,都是在HTML中定义一个块,但和“<Div>”不同的是,“<span>”定义的是一个单行块,其“style”后的“DISPLAY: none”意思是在显示页面时,不显示此块中的内容。
这样随机加入的干扰字符就不会在网页中显示,但将所见到的文字复制到记事本中时,因为Style样式失去了作用,所以那些隐藏的干扰乱码也就开始显山露水了。
在VB中,Instr函数是用来查找关键字所在的位置的,而Mid函数则可以截取指定位置内的字段,Replace函数则是替换指定内容的函数。利用这三个函数,再加上一个Do While 循环,就可以过滤掉这些干扰字符了,其代码如下:
Dim MyFileObject
Dim MyTextFile
Dim ReadTextFile
Dim Jm1
Dim Jm2
Dim StrZi1
Dim StrZi2
dim ThisAll
Set MyFileObject = CreateObject("Scripting.FileSystemObject") '
Set MyTextFile = MyFileObject.CreateTextFile("c:\new.htm") '过滤后的HTML
Set ReadTextFile = MyFileObject.OpenTextFile("c:\old.txt") '要过滤的源码
ThisAll=ReadTextFile.readall '读取要过滤的源码
MyTextFile.Write(Jmdcw(ThisAll)) '将过滤后的内容写入到new.htm中
ReadTextFile.close
MyTextFile.Close
set mytextfile=nothing
set readtextfile=nothing
set myfileobject=nothing
msgbox "转换完成",, "成功"
Function Jmdcw(Temp) '自定义一个过滤过程
StrZi1 = "<span style=" & Chr(34) & "DISPLAY: none" & Chr(34) & ">" '干扰字符前的关键字符,chr(34)代表双引号
StrZi2 = "</span>" '干扰字符后的关键字符
Jm1 = 1
Do While Jm1 <> 0
Jm1 = InStr(Jm1, Temp, StrZi1, 1) '查找第一段关键字符的位置
If Jm1 <>0 Then
Jm2 = InStr(Jm1, Temp, StrZi2, 1) '查找第二段关键字符的位置
Temp = Replace(Temp, Mid(Temp, Jm1, Jm2 - Jm1 + Len(StrZi2)), "") '截取并替换为空
Jm1 = 1
End If
Loop
Jmdcw = Temp
End Function
将这段代码保存为VBS脚本格式,然后将要复制页面的源代码以“old.txt”为文件名,另存到C盘中,接着双击VBS脚本,在弹出“转换完成”的提示后,打开C盘中的“new.htm”文件,这个就是过滤后的文件了,最后将文字复制到文档中即可。
编后
除了采用“<span style="DISPLAY: none">*****</span>”的方法,加入不可见的干扰字符外,还有一种方法就是在每行的后面加上“<font color="#FFFFFF">不规则的干扰字符</font>”。
对这种方法,利用相同的原理,只要把VBS代码中的“StrZi1”的值改为“<font color=" & chr(34) & "#FFFFFF" & chr(34) ">"”,“StrZi2”的值改为“"</font>"”,就可以解决问题了。