以下是引用mt56在2009-1-8 13:17:00的发言:english
这个单词里面,我把e设为内容关键字,而我的网址如果是www.engee.com,文章发表出来,你看看会是什么效果?
english
这个单词里面,我把e设为内容关键字,english 这个单词里面,我把e设为内容关键字,而我的网址如果是ef="http://www.engee.com">www.engee.com,文章发表出来,你看看会是什么效果? english 这个单词里面,我把e设为内容关键字,而我的网址如果是ef="http://www.engee.com">www.engee.com,文章发表出来,你而我的网址如果是www.engee.com,文章发表出来,你看看会是什么效果?
english
这个单词里面,我把e设为内容关键字,而我english 这个单词里面,我把e设为内容关键字,而我的网址如果是ef="http://www.engee.com">www.engee.com,文章发表出来,你看看会是什么效果? english 这个单词里面,我把e设为内容关键字,而我的网址如果是ef="http://www.engee.com">www.engee.com,文章发表出来,你的网址如果是www.engee.com,文章发表出来,你看看会是什么效果?
下面的这个函数就有可能出现你所说的问题!这是科讯文章系统中 设置》辅助管理》内容关键字设置 中功能模块上的小BUG。
(KS_Cls/Kesion.CommonCls.asp中‘2931行’)
'*************************************************************************************
'函数名:ReplaceInnerLink
'作 用:替换站内链接
'参 数:Content-待替换内容
'*************************************************************************************
Public Function ReplaceInnerLink(Content)
If Not IsObject(Application(SiteSN & "_InnerLink")) then
Dim Rs:Set Rs = Conn.Execute("Select Title,Url,OpenType,CaseTF,Times From KS_InnerLink Where OpenTF=1 Order By ID")
Set Application(SiteSN & "_InnerLink")=RecordsetToxml(Rs,"InnerLink","InnerLinkList")
Set Rs = Nothing
end if
Dim Node,CaseTF,Times
For Each Node In Application(SiteSN & "_InnerLink").DocumentElement.SelectNodes("InnerLink")
If InStr(Content,Node.selectSingleNode("@ks0").text)>0 Then
Dim OpenTypeStr:OpenTypeStr = G_O_T_S(Node.selectSingleNode("@ks2").text)
CaseTF=Cint(Node.selectSingleNode("@ks3").text)
Times=Cint(Node.selectSingleNode("@ks4").text)
Content= Replace(Content,Node.selectSingleNode("@ks0").text,"<a href="""&Node.selectSingleNode("@ks1").text&"""" & OpenTypeStr & " class=""innerlink"">"&Node.selectSingleNode("@ks0").text&"</a>",1,Times,CaseTF)
End if
Next
ReplaceInnerLink = HTMLCode(Content)
End Function
'======================
这种情况下因为你设置的关键字"e"也包含了HTML标签中的<a href="">标签中的‘E’,所以,要是原来内容中的<a href="">标签被新关键字‘E’替换后原链接主被破坏,页面也会凌乱:<a hr<a href="">e</a>f=""></a>
我的方案是:
1、设置关键字时不要用单上英文字母,数字单个数字也不要用。
2、进行保留的关键字的保护,比如关键字为,www,com,net,http,engee
3、先过滤HTML标签。
'代码部分=======================================
<%
'in_out:封存=in 输出=out
'constr:文章内容
'KeyWord:保留的关键字
Function KeepWord(in_out,Constr,splitstr)
Dim htmltag_keyword,htmltag
KeyWord = "www,com,net,http,engee"
If in_out = "in" Then
Constr=Replace(Replace(Constr,vbCrLf,""),vbNewLine,""): htmltag = ReExec(Constr,"<.+?>")
Session("htmltag_keyword_"&splitstr) = KeyWord
If htmltag<>"" Then Session("htmltag_keyword_"&splitstr) = htmltag &","& KeyWord
End if
htmltag_keyword=Session("htmltag_keyword_"&splitstr)
keyword = Split(htmltag_keyword , ",")
For i = 0 To UBound(keyword) - 1
If in_out = "in" Then Constr = Replace(Constr,keyword(i),splitstr&I)
If in_out = "out" Then Constr = Replace(Constr,splitstr&I,keyword(i))
next
KeepWord = Constr
End Function
Function ReExec(strng,patrn)
Dim regEx, Match, Matches,RetStr,splitstr
Set regEx = New RegExp
If patrn="" Then patrn="<[^>]*>"
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(strng)
splitstr=""
For Each Match in Matches
If InStr(RetStr,Match.Value)=0 Then RetStr = RetStr &splitstr& Match.Value:splitstr=","
'RetStr = RetStr &splitstr& Match.Value:splitstr=","
Next
ReExec = RetStr
Set regEx = Nothing
Set Matches = Nothing
End Function
Sub gotest()
Dim txt,keyword
KeyWord = "www,e,键字,文章,p,单词"'要添加链接的关键字
txt="<p>english</p><p>这个单词里面,我把e设为内容关键字,而我的网址如果是<a href=""http://www.engee.com/"">www.engee.com</a>,文章发表出来,你看看会是什么效果?</p>"
keyword = Split(keyword,",")
'-------------------
txt = KeepWord("in",txt,"!@#$%")
'-------------------
For i = 0 To UBound(keyword) - 1
a_txt=KeepWord("in",a_txt,"^&*()")
txt = Replace(txt,keyword(i),KeepWord("in","<a href=""http://www.engee.com/"">"&keyword(i)&"</a>","^&*()"))
'If ReExec(txt,"<.+?>")<>"" then htmltag_keyword = htmltag_keyword&","&ReExec(txt,"<.+?>")
'txt = KeepWord("in",txt,"^&*()")
Next
'-------------------
txt = KeepWord("out",txt,"^&*()")
txt = KeepWord("out",txt,"!@#$%")
'-------------------
response.Write txt
End Sub
Call gotest()
%>
'==========================代码结束
时间写的匆忙,有一些细节也没处理,思路就是这样,有兴趣的同学可以去完善。