网络编程
位置:首页>> 网络编程>> Asp编程>> 文章关键字替换带链接需要注意的两个问题

文章关键字替换带链接需要注意的两个问题

  发布时间:2010-02-25 12:18:00 

标签:替换,关键字,正则表达式

第一步一般是建立一个关键字替换表 如 id keyword url 等字段

第二步是文章显示时把【文章】内容和【关键字替换表】对应的关键字替换成“<a href="[url字段]" target="_blank">[keyword字段]</a>”

如【关键字替换表】
海河 http://www.zhouhaihe.com/blog/
海河工作室 http://www.zhouhaihe.com/

替换内容: 海河工作室

替换结果为 <a href="http://www.zhouhaihe.com/blog/" target="_blank">海河</a>工作室

这个显然不是我们想得到的结果

解决方法:替换顺序需要调整为,先长后短。即先替换“海河工作室”再替换“海河”

替换结果为 <a href="http://www.zhouhaihe.com/" target="_blank"><a href="http://www.zhouhaihe.com/blog/" target="_blank">海河</a>工作室<a>

这个乱套了!第二次把a标签之间的文字替换掉了。

解决方法:替换时不替换a标签之间的文字,避免重复替换。

现在把我写的代码复制出来供大家参考

调用代码:
 

文章内容=keywords_link(文章内容)


替换函数:
 


'关键字
function keywords_link(byval str)
 dim rs
 '问题1解决办法
 set rs=conn.execute("select * from [关键字替换表] order by len(keyword字段) desc")
 while not rs.eof
 str=p_replace(str,rs("keyword字段"),"<a href="""&rs("url字段")&""" target=""_blank"" >"&rs("keyword字段")&"</a>")
 rs.movenext
 wend
 rs.close
 set rs=nothing
 keywords_link=str
end function
 '问题2解决函数 避免重复替换
function p_replace(byval content,byval asp,byval htm)
dim Matches,objRegExp,strs,i
strs=content
Set objRegExp = New Regexp'设置配置对象
objRegExp.Global = True'设置为全文搜索
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(\<a[^<>]+\>.+?\<\/a\>)|(\<img[^<>]+\>)"'
Set Matches =objRegExp.Execute(strs)'开始执行配置
'替换正则表达式
i=0
Dim MyArray()
For Each Match in Matches
ReDim Preserve MyArray(i)
MyArray(i)=Mid(Match.Value,1,len(Match.Value))
strs=replace(strs,Match.Value,"<"&i&">")
i=i+1
Next
'没有正则时候
if i=0 then
 content=replace(content,asp,htm)
 p_replace=content
 exit function
end if
'特殊字符替换
strs=replace(strs,asp,htm)
'替换回去
for i=0 to ubound(MyArray)
strs=replace(strs,"<"&i&">",MyArray(i))
next
p_replace=strs
end function
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com