1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

来一段asp 防复制的代码

本帖由 小叶2006-03-06 发布。版面名称:后端开发

  1. 空心菜

    空心菜 New Member

    注册:
    2005-10-05
    帖子:
    85
    赞:
    0
    代码:
    这样用有问题吗??
    <%
    '---------------------------------------
    '模板类,使用系统自定义标记语言输出文件
    '---------------------------------------
    
    Class clsTemplate
    
    Private adSaveCreateOverWrite
    Private adSaveCreateNotExist
    	'开始标记
        Public starttag
    	'结束标记
    	Public endtag
    	'定义文件名
    	Public filename
    	Dim key_arr()
    	Dim val_arr()
    	Public content
    	Public total
        Public contenta()
    	'块的内容(解析后的)
        Public BlockContent
        Public block_begin_delim
        Public block_end_delim
        Public block_begin_word
        Public block_END_word
        Public block_null
    
    '类的初始化
    Sub Class_Initialize()
    
    	Redim key_arr(0)
    	Redim val_arr(0)
    	Redim contenta(0)
     
    	adSaveCreateOverWrite = 2
    	adSaveCreateNotExist = 1
    	starttag = "{"
    	endtag = "}"
    	total = 0
    	block_begin_word = "tag:"
    	block_end_word = "/tag:"
    	block_begin_delim = "<"
    	block_end_delim = ">"
    	'开始和结束之间用空格隔开
    	block_null = " "
    
    End Sub
    
    Sub echo (a)
    	Response.Write a
    End Sub
    
    '读入文件的函数
    Function readfile(filepath)
    on error resume next
    Set stm2 =server.createobject("ADODB.Stream")
    stm2.Charset = "gb2312"
    stm2.Open
    stm2.LoadFromFile filepath
    readfile = stm2.ReadText
    End Function
    '设置防复制函数
    Function ReadToCode(str,Str1,result)
    dim name
    dim i,j,k
    If isnull(str) then
    ReadToCode=""
    Exit Function
    End If
    Randomize 
    k=instr(str,"</P>")
    Do while k>0
    result=""
    for i=0 to 19
    j=Int(128 * Rnd)+1
    if j=60 or j=62 then
    j=j+1
    end if
    result =result&chr(j) ' 产生随机数。
    next 
    result="<span style='DISPLAY: none'>"&result&"</span>"
    str=replace(str,"</p>",result&"<'/p>",1,1)
    k=instr(str,"</p>")
    loop
    str=replace(str,"<'/p>","</p>")
    k=instr(str,"<br>")
    Do while k>0
    result=""
    for i=0 to 19
    j=Int(128 * Rnd)+1
    if j=60 or j=62 then
    j=j+1
    end if
    result =result&chr(j) ' 产生随机数。
    next 
    result="<span style='DISPLAY: none'>"&result&"</span>"
    str=replace(str,"<br>",result&"<'br>",1,1)
    k=instr(str,"<br>")
    loop
    str=replace(str,"<'br>","<br>")
    ReadToCode=str&"<div align=right style='color=gray'>[版权归原作者及"&Str1&"共同拥有,转载请注明出处]</div>"
    End Function
    
    '写入文件的函数 
    Function writefile(filepath,str)
    on error resume next
    Set stm = server.createobject("ADODB.Stream")
    stm.Charset = "gb2312"
    stm.Open
    str=ReadToCode(str,"blue2004","www.xxx.com")  '按照您说的修改方法 
    stm.WriteText str
    stm.SaveToFile filepath, adSaveCreateOverWrite
    End Function
    
    '设置文件,读取文件内容
    Function SetFile(file)
    filename=file
    content=readfile(file)
    End Function
    
    'val是否在数组arr中
    Function inarray(val,arr)
    	For i = 0 To ubound(arr)
    	If arr(i)=val Then
    		inarray=i
    		Exit Function
    	End If
    	Next
    	'不在数组中
    	inarray = -1
    End Function
    
    Function listarray(arr,str)
    	str = "   " & str
    	For i = 0 To ubound(arr)
    		echo str & i & ":" & arr(i) & vbcrlf
    	Next
    End Function 
    
    '添加新的键值
    Function NewKey(key,val)
    	i = total 
    	pos=inarray(key,key_arr)
    	'如果这个键值不存在
    	If pos = -1 Then
    	Redim Preserve key_arr(i)
    	Redim Preserve val_arr(i)
    		
    	'echo "key_arr(" & i & ")=" & key & vbcrlf
    		
    	key_arr(i) = key
    	val_arr(i) = val
    	total = total+1
    	Else
    	key_arr(pos)=key
    	val_arr(pos)=val
    	End If 
    End Function
    
    '初始化键名数组
    Function resetKeys()
    	Redim key_arr(0)
    	Redim val_arr(0)
    	total = 0
    End Function
    
    '得到把某一个文本段的{}内容替换后的块
    Function getTextContent(Tcontent)
    	tmp = Tcontent
    	For i = 0 To total -1
    		'替换各个键值
    		tmp = replace(tmp,starttag & key_arr(i) & endtag, val_arr(i) )
    	Next
    	'替换{}类似的东西,目前暂时先放一放把
    	Set re = new RegExp
    	re.Global = True
    	re.Ignorecase = True
    	pt = "{([a-zA-Z0-9_]{0,50})}"
    	re.Pattern = pt
    	Set tt = re.Execute(tmp)
        For i = 0 To tt.count -1
    		tmp = replace(tmp, tt.item(i),"")
        Next
        Set re = Nothing
        Set tt = Nothing
    	getTextContent = tmp
    End Function
    
    Function getText()
    '得到把某一个文本段的{}内容替换后的块
    	tmp = content
    	For i = 0 To total -1
    		'替换各个键值
    		tmp = replace(tmp,starttag & key_arr(i) & endtag, val_arr(i) )
    	Next
    	'替换{}类似的东西,目前暂时先放一放把
    	'这里是模式匹配的应用,有正规表达式应用高手的指导一下!
    	Set re = new RegExp
    	re.Global = True
    	re.Ignorecase = True
    	pt = "{([a-zA-Z0-9_]{0,50})}"
    	re.Pattern = pt
    	Set tt = re.Execute(tmp)
        For i = 0 To tt.count -1
        tmp = replace(tmp, tt.item(i),"")
        Next
        Set re = Nothing
        Set tt = Nothing
    	getText=tmp
    	content=tmp
    End Function
    
    '得到模板内容中某一个块的内容
    Function getBlockContent(block)
    	firstStr = "<tag:"& Block &">"
    	secondStr = "</tag:" & Block &">"
    	pos1 = instr(content,firststr)
    	pos2 = instr(content,secondstr)
    	If (pos2-pos1) = 0 Then
    	Else
    		tempstr = mid(content,pos1,pos2-pos1)
    	End If
    	'response.end
    	'返回该字符串
    	getBlockContent = tempstr
    End Function
    
    '输出到某个文件
    Sub tofile(file)
    tmp = gettext()
    '输出到文件
    writefile file,content
    End Sub
    
    '到到某一个块的解析后的内容
    Function ParseBlock(block)
    	'得到某一个块解析前的内容
    	b = GetBlockContent(block)
    	'得到这个块解析后的内容
    	tmp = getTextContent(b)
    	'保存起来,这样就实现了重复显示某一个块
    	BlockContent = BlockContent & tmp
    	ParseBlock = tmp 
    End Function
    
    '把解析了几次的块的内容给替换解析了
    Function replaceBlock(block)
    	'得到这个块解析前的内容
    	con = GetBlockContent(block)
    	tmp = replace(content,con,Blockcontent)
    	blockcontent = ""
    	content = tmp  
    End Function
    
    End Class
    %>
     
    #21 空心菜, 2006-04-08
    最后编辑: 2006-04-08
  2. 空心菜

    空心菜 New Member

    注册:
    2005-10-05
    帖子:
    85
    赞:
    0
    这样弄了好象没起作用
     
  3. 风狼

    风狼 New Member

    注册:
    2005-10-01
    帖子:
    7,452
    赞:
    25
    呀哦。你不会把<%
    '作用:文字防复制乱码 函数
    'Date:2006-3-6
    '作者:blue2004
    '参数str 为原文,str1作者也是你自己,reslut产生乱码的种子
    Function ReadToCode(str,Str1,result)
    dim name
    dim i,j,k
    If isnull(str) then
    ReadToCode=""
    Exit Function
    End If
    Randomize
    k=instr(str,"</P>")
    Do while k>0
    result=""
    for i=0 to 19
    j=Int(128 * Rnd)+1
    if j=60 or j=62 then
    j=j+1
    end if
    result =result&chr(j) ' 产生随机数。
    next
    result="<span style='DISPLAY: none'>"&result&"</span>"
    str=replace(str,"</p>",result&"<'/p>",1,1)
    k=instr(str,"</p>")
    loop
    str=replace(str,"<'/p>","</p>")
    k=instr(str,"<br>")
    Do while k>0
    result=""
    for i=0 to 19
    j=Int(128 * Rnd)+1
    if j=60 or j=62 then
    j=j+1
    end if
    result =result&chr(j) ' 产生随机数。
    next
    result="<span style='DISPLAY: none'>"&result&"</span>"
    str=replace(str,"<br>",result&"<'br>",1,1)
    k=instr(str,"<br>")
    loop
    str=replace(str,"<'br>","<br>")
    ReadToCode=str&"<div align=right style='color=gray'>[版权归原作者及"&Str1&"共同拥有,转载请注明出处]</div>"
    End Function


    这段放到一个文件里。然后用<!--#include file="ReadToCode.asp"-->

    然后在显示数据库字段内容时用上吗?
    原来是Response.Write objRs("字段名")
    我们就改成Response.Write ReadToCode(objRs("字段名"),你的名字(文章作者名),你的乱码标识(如你的网站名))
     
  4. 风狼

    风狼 New Member

    注册:
    2005-10-01
    帖子:
    7,452
    赞:
    25
    顺便说下 ̄这函数是ASP的。。
     
  5. 空心菜

    空心菜 New Member

    注册:
    2005-10-05
    帖子:
    85
    赞:
    0
    汗,终于找到原因了

    原来小叶提供的代码中
    k=instr(str,"</P>")

    这个P是大写了
    改成小写就可以了
    被小叶误导了很长时间了

    呵呵
    在这里还是得感谢小叶提供代码和风狼,不学无术的帮助!

    谢谢!

    另外,有一个新的问题
    可以实现防复制了
    但是出来的只是乱码防复制
    那个版权什么的怎么不能和乱码一同作为防复制显示出来呢??
     
  6. 空心菜

    空心菜 New Member

    注册:
    2005-10-05
    帖子:
    85
    赞:
    0
  7. 风狼

    风狼 New Member

    注册:
    2005-10-01
    帖子:
    7,452
    赞:
    25
    恭喜解决了难题~