账号通
    

账号  

密码  

7382

查看

12

回复
主题:[分享]V5.51内容关键字替换的改进[3-22号整理] [收藏主题] 转到:  
科汛官方 当前离线

47268

主题

145

广播

405

粉丝
添加关注
级别:管理员

用户积分:101604 分
登录次数:7935 次
注册时间:2006/12/7
最后登录:2023/12/14
科汛官方 发表于:2009/3/22 15:49:00   | 只看该作者 查看该作者主题 楼主 
科汛智能建站系统

今天突然想到之前有用户反应该内容关键字替换问题.描述如下:

 

假如你的文章内容如下:

 

KesionCMS是目前国内最强的<a href="http://www.kesion.com" title="CMS系统">asp</a>开发的CMS系统,她不仅使用简单,而且程序开源.<img src="http://www.kesion.com/images/logo.jpg" alt="KesionCMS标志" />....

 

 

并假设你在后台设置了内容关键字CMS,链接为http://www.kesion.com

 

 

那么这里生成的前台页面将会变成

 

Kesion<a href="http://www.kesion.com" class="innerlink">CMS</a>是目前国内最强的<a href="http://www.kesion.com" title="<a href="http://www.kesion.com" class="innerlink">CMS</a>系统">asp</a>开发的<a href="http://www.kesion.com" class="innerlink">CMS</a>系统,她不仅使用简单,而且程序开源.<img src=http://www.kesion.com/images/logo.jpg alt="Kesion<a href="http://www.kesion.com" class="innerlink">CMS</a>标志" />....

 

 

即会把所有cms都替换成 <a href="http://www.kesion.com" class="innerlink">CMS</a>

 

显然在title="CMS系统" alt="KesionCMS标志" 这两个地方是不应该替换的.否则页面将出现混乱.

 

 

 

出现这个情况是应该科汛系统的内容关键字替换直接使用replace替换所致.今天给大家讲的就是要改进这个替换的地方.不再直接使用replace函数.而是判断在><之间的关键字才给替换.修改代码如下

 

 

请用dw工具打开KS_Cls/Kesion.CommonCls.asp文件,并找到

 

'*************************************************************************************
 '函数名: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

 

 

将上面这部分内容替换成以下代码,即可解决此问题

 

 '*************************************************************************************
 '函数名:ReplaceInnerLink
 '作  用:替换站内链接
 '参  数:Content-待替换内容
 '*************************************************************************************
 Public Function ReplaceInnerLink(Content)
   Content=HTMLCode(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,Inti,DLocation,XLocation,StrReplace,CurrentTimes,SourceStr
  For Each Node In Application(SiteSN & "_InnerLink").DocumentElement.SelectNodes("InnerLink")
       Inti=1
    CurrentTimes=0
    Dim OpenTypeStr:OpenTypeStr = G_O_T_S(Node.selectSingleNode("@ks2").text)
    CaseTF=Cint(Node.selectSingleNode("@ks3").text)
    Times=Cint(Node.selectSingleNode("@ks4").text)
    StrReplace=Node.selectSingleNode("@ks0").text
   
   If InStr(1,Content,StrReplace,CaseTF)>0 Then
     Do While instr(Inti,Content,StrReplace,CaseTF)<>0
       Inti=instr(Inti,Content,StrReplace,CaseTF)
    If Inti<>0 then
      DLocation=instr(Inti,Content,">",CaseTF) '仅替换在><之间的关键字
      XLocation=instr(Inti,Content,"<",CaseTF)
      If DLocation >= XLocation Then
     Content=left(Content,Inti-1) & "<a href="""&Node.selectSingleNode("@ks1").text&"""" & OpenTypeStr & " class=""innerlink"">"&Node.selectSingleNode("@ks0").text&"</a>" & mid(Content,Inti+len(StrReplace))
     Inti=Inti+len("<a href="""&Node.selectSingleNode("@ks1").text&"""" & OpenTypeStr & " class=""innerlink"">"&StrReplace&"</a>")
     CurrentTimes=CurrentTimes+1
     If Times<>-1 And CurrentTimes>= Times Then Exit Do
     Else
        Inti=Inti+len(StrReplace)
     End If
      End If
     Loop 
   End if
  Next
  ReplaceInnerLink = Content
 End Function

 

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
任我行 当前离线

6496

主题

191

广播

251

粉丝
添加关注
级别:管理员

用户积分:46049 分
登录次数:4182 次
注册时间:2006/4/26
最后登录:2024/8/23
任我行 发表于:2009/3/23 12:07:00   | 只看该作者 查看该作者主题 沙发 
以下是引用cyxjq在2009-3-23 8:13:00的发言:
不错这样的做法在6.0中要处理好!支持一下!

会处理的

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
bxdcr 当前离线

311

主题

0

广播

0

粉丝
添加关注
级别:三年级

用户积分:3211 分
登录次数:231 次
注册时间:2007/9/28
最后登录:2017/8/26
bxdcr 发表于:2009/3/23 10:06:00   | 只看该作者 查看该作者主题 藤椅 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
cyxjq 当前离线

1713

主题

8

广播

2

粉丝
添加关注
级别:高一年

用户积分:10077 分
登录次数:395 次
注册时间:2006/7/18
最后登录:2018/8/10
cyxjq 发表于:2009/3/23 8:13:00   | 只看该作者 查看该作者主题 板凳 
科汛在线网校系统
不错这样的做法在6.0中要处理好!支持一下!
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2009/3/23 10:07:00   | 只看该作者 查看该作者主题 报纸 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
zhenfengdz 当前离线

3821

主题

0

广播

1

粉丝
添加关注
级别:大三

用户积分:21733 分
登录次数:436 次
注册时间:2007/1/9
最后登录:2013/4/24
zhenfengdz 发表于:2009/3/23 7:43:00   | 只看该作者 查看该作者主题 地板 
科汛智能建站系统
太好了,到底有办法了。
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
port 当前离线

201

主题

0

广播

0

粉丝
添加关注
级别:一年级

用户积分:1556 分
登录次数:148 次
注册时间:2008/11/5
最后登录:2018/5/10
port 发表于:2009/3/22 22:37:00   | 只看该作者 查看该作者主题 7楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
wiki 当前离线

1001

主题

3

广播

6

粉丝
添加关注
级别:八年级

用户积分:4722 分
登录次数:206 次
注册时间:2008/12/22
最后登录:2017/7/26
wiki 发表于:2009/3/22 22:11:00   | 只看该作者 查看该作者主题 8楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
mt56 当前离线

4985

主题

53

广播

17

粉丝
添加关注
级别:版主

用户积分:23430 分
登录次数:1621 次
注册时间:2007/2/10
最后登录:2022/9/28
mt56 发表于:2009/3/22 20:45:00   | 只看该作者 查看该作者主题 9楼 
有的甚至无限替换下去的。
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
mt56 当前离线

4985

主题

53

广播

17

粉丝
添加关注
级别:版主

用户积分:23430 分
登录次数:1621 次
注册时间:2007/2/10
最后登录:2022/9/28
mt56 发表于:2009/3/22 20:43:00   | 只看该作者 查看该作者主题 10楼 
科汛在线考试系统(NET)

对,我以前就提过这样的问题,现在终于解决了。

要不然,就很受限制了。

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.18799秒 powered by KesionCMS 9.0