注册 登录
编程论坛 ASP技术论坛

截取部分文章内容后有一些标签显示出来了,很不好看,如何在下面的截取代码中修正过来?[..问题基本解决!敬送50分]

tepnidh 发布于 2010-09-08 21:12, 2069 次点击
问题描述请打开index.asp,后台修改页面为hxg_scgk.asp.
我把完整的程序传上来,请您在此基础上帮我修改一下,多谢!

只有本站会员才能查看附件,请 登录

下面就是截取后文章的部分内容,但文中有标签,如何才能去掉标签?
<P>      在DW中我用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了,很不好看,就像去除HTML那样的效果,现在我想<BR>把这些标签都过滤掉,也就是说,就只显示文字,<IMG style="WIDTH: 192px; HEIGHT: 138px" height=600 src="/eWebEditor/UploadFile/201098204055477.jpg" width=796 border=0>不要把那些也标签显示出来,插入图片显示不出来,只显示代码········截取字符串的代码请看idnex.asp或记事本,应该怎么改?后台修改页面是<FONT face=Verdana>hxg-scgk.asp。</FONT>本人菜鸟,请大家帮帮忙·····谢谢!!!<BR>     在DW中我用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了…

截取文章部分文字代码及调用代码:
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>
Function gotTopic(str,strlen)
if str="" then
gotTopic=""
exit function
end if
dim l,t,c, i
str=replace(replace(replace(replace(str,"&nbsp;"," "),"&quot;",chr(34)),"&gt;",">"),"&lt;","<")
l=len(str)
t=0
for i=1 to l
c=Abs(Asc(Mid(str,i,1)))
if c>255 then
t=t+2
else
t=t+1
end if
if t>=strlen then
gotTopic=left(str,i) & "…"
exit for
else
gotTopic=str
end if
next
gotTopic=replace(replace(replace(replace(gotTopic," ","&nbsp;"),chr(34),"&quot;"),">","&gt;"),"<","&lt;")
gotTopic="<font style='color:#0066FF;font-size:12px;' style='line-height:18px;' >"& gotTopic &"</font>"

End Function
</SCRIPT>

调用代码:
<% =(gotTopic((Recwzxs.Fields.Item("content").Value), 300)) %>

[ 本帖最后由 tepnidh 于 2010-9-11 07:40 编辑 ]
18 回复
#2
hams2010-09-09 08:49
具体问题个体分析
以下是我写的一些,供参考:

 FuSqlLoad = ReplaceTest(sSqlID,"\[/?[a-zA-Z]]|\[SIZE=\d]|\[/ALIGN]|\[/SIZE]|\[ALIGN=\w{4,6}]","")
  
'########---正则表达式替换函数---
'用法:ReplaceTest(原文本,正则表达式,替换的字符)
'例子:ReplaceTest("A12B34","\d","")  '将数字清空
Function ReplaceTest(strng, patrn, replStr)  
Dim regEx
Set regEx = New RegExp  '建立正则表达式。  
regEx.Pattern = patrn   '设置模式。  
regEx.IgnoreCase = True '设置是否区分大小写。
regEx.Global = True     '设置全局可用
ReplaceTest = regEx.Replace(strng, replStr) '作替换。  
End Function  
#3
tepnidh2010-09-09 12:00
回复 2楼 hams
谢谢您,能否在我用的代码中修改一下?请您帮帮我,好吗?
#4
tepnidh2010-09-09 19:38
请您帮帮我吧!
#5
tepnidh2010-09-10 07:20
呵~~,自己顶一下吧,期待着各位老师的帮助!
#6
hams2010-09-10 08:53
具体内容具体分析,别人都不知道你那个文章会出现什么样的代码,也很难写出适合的代码。
#7
tepnidh2010-09-10 10:19
回复 6楼 hams
谢谢您的关注和支持!我的意思是,能不能在“截取文章部分文字代码”中做一修改,然后就不会显示标签了。

下面这段文字就是截取后文章的部分内容,但文中有标签,如何才能去掉标签?(蓝色部分就是显示的标签

<P>      在DW中我用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了,很不好看,就像去除HTML那样的效果,现在我想<BR>把这些标签都过滤掉,也就是说,就只显示文字,<IMG style="WIDTH: 192px; HEIGHT: 138px" height=600 src="/eWebEditor/UploadFile/201098204055477.jpg" width=796 border=0>不要把那些标签显示出来,插入图片显示不出来,只显示代码········本人菜鸟,请大家帮帮忙·····谢谢!<BR>     在DW中我用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了…

截取文章部分文字代码及调用代码:

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>
Function gotTopic(str,strlen)
if str="" then
gotTopic=""
exit function
end if
dim l,t,c, i
str=replace(replace(replace(replace(str,"&nbsp;"," "),"&quot;",chr(34)),"&gt;",">"),"&lt;","<")
l=len(str)
t=0
for i=1 to l
c=Abs(Asc(Mid(str,i,1)))
if c>255 then
t=t+2
else
t=t+1
end if
if t>=strlen then
gotTopic=left(str,i) & "…"
exit for
else
gotTopic=str
end if
next
gotTopic=replace(replace(replace(replace(gotTopic," ","&nbsp;"),chr(34),"&quot;"),">","&gt;"),"<","&lt;")
gotTopic="<font style='color:#0066FF;font-size:12px;' style='line-height:18px;' >"& gotTopic &"</font>"

End Function
</SCRIPT>

调用代码:
<% =(gotTopic((Recwzxs.Fields.Item("content").Value), 300)) %>



[ 本帖最后由 tepnidh 于 2010-9-10 10:26 编辑 ]
#8
lele20072010-09-10 10:28
程序代码:
function DelHtml(str)
if Instr(str,"<")>=1 then
  str=Lcase(str)
  dim re
  Set re=new RegExp
  re.IgnoreCase=true
  re.Global=True
  re.Pattern="(\<.[^\<]*\>)"
  str=re.replace(str,"")
  DelHtml=str
  set re=nothing
else
  DelHtml=str
end if
end function

<% =left(DelHtml(Recwzxs.Fields.Item("content").Value),300) %>

是不是要这样过滤HTML标签,只保留文字?
#9
tepnidh2010-09-10 11:31
回复 8楼 lele2007
谢谢您,您真是高手!正是学生想要的效果!代码简单而实用!佩服!

您能否再帮学生一把,就是在上面的代码中再加上“省略号代码”?(在截取的文字后面有省略号)

#10
lele20072010-09-10 13:19
程序代码:
Function DelTitle(l_String,l_Number,l_show)
Dim ok
If Len(l_String)>=l_Number Then
  ok=Left(l_String,l_Number) & l_show
Else
  ok=l_String
End If
DelTitle=ok

End Function
<% =DelTitle(DelHtml(Recwzxs.Fields.Item("content").Value),300,"...") %>

截取前300个字符,超过时,用省略号代替。。不足300时不显示省略号。。。
#11
tepnidh2010-09-10 14:04
回复 10楼 lele2007
ele2007老师,您好!再次表示感谢!学生实在太菜了,您写的下面这段代码是独立使用,还是与上一段代码合起来使用?如果独立使用,会出现以下错误:
错误类型:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'DelHtml'

如果是合起来用,怎样用呢?

最后效果是:不显示标签,大于规定字数用省略号表示,另外就是能修改字体的大小,颜色及行距。请您再帮帮我吧,就差这么一点了!!!




[ 本帖最后由 tepnidh 于 2010-9-10 14:11 编辑 ]
#12
lele20072010-09-10 14:22
程序代码:
<%
Function DelTitle(l_String,l_Number,l_show)
Dim ok
If Len(l_String)>=l_Number Then
  ok
=Left(l_String,l_Number) & l_show
Else
  ok
=l_String
End If
DelTitle
=ok

End Function

function DelHtml(str)
if Instr(str,"<")>=1 then
  str
=Lcase(str)
  
dim re
  
Set re=new RegExp
  re.IgnoreCase
=true
  re.Global
=True
  re.Pattern
="(\<.[^\<]*\>)"
  str
=re.replace(str,"")
  DelHtml
=str
  
set re=nothing
else
  DelHtml
=str
end if
end function

%>

<%

 
dim str

 str
= "<font color='red'>乐乐乐乐乐乐乐乐乐乐乐乐乐乐乐乐乐乐,编程论坛bbs.bccn.net</font>"

 response.write
"原样输出:"&str&"<br>"&vbcrlf

 response.write
"过滤HTML:"&DelHtml(str)&"<br>"&vbcrlf

 response.write
"截取指定内容:"&DelTitle(DelHtml(str),10,"...")&"<br>"&vbcrlf
%>
要调用函数使用。。
你把str换成:Recwzxs.Fields.Item("content").Value  测试。

估计你的是读取数据库内容循环显示所有文章。。显示时截取一部份内容。。显示。。
如果要保留行距及文字大小还有颜色。。这个做法是过滤了所有的HTML只保留了纯文本。。

保留某些样式。。最好用HTML标签自动闭合。。或者在数据库里新建一个字段。。主要用于保存文章的摘要。。(建议你用这种,方便一点)

一起学习讨论嘛。。叫老师。。好别扭的哟。。



[ 本帖最后由 lele2007 于 2010-9-10 14:28 编辑 ]
#13
lele20072010-09-10 14:39
程序代码:
<%
Function DelTitle(l_String,l_Number,l_show)
Dim ok
If Len(l_String)>=l_Number Then
  ok
=Left(l_String,l_Number) & l_show
Else
  ok
=l_String
End If
DelTitle
=ok

End Function


' ----------------------
'
自动闭合HTML
'
----------------------
Function closeHTML(strContent)
   
Dim arrTags, i, OpenPos, ClosePos, re, strMatchs, j, Match
   
Set re = New RegExp
    re.IgnoreCase
= True
    re.Global
= True
    arrTags
= Array("a", "p", "div", "span", "table", "ul", "font", "b", "u", "i", "h1", "h2", "h3", "h4", "h5", "h6")
   
For i = 0 To UBound(arrTags)
        OpenPos
= 0
        ClosePos
= 0
        re.Pattern
= "\<" + arrTags(i) + "( [^\<\>]+|)\>"
        
Set strMatchs = re.Execute(strContent)
        
For Each Match in strMatchs
            OpenPos
= OpenPos + 1
        
Next
        re.Pattern
= "\</" + arrTags(i) + "\>"
        
Set strMatchs = re.Execute(strContent)
        
For Each Match in strMatchs
            ClosePos
= ClosePos + 1
        
Next
        
For j = 1 To OpenPos - ClosePos
            strContent
= strContent + "</" + arrTags(i) + ">"
        
Next
   
Next
    closeHTML
= strContent
End Function

Function DelTitle(l_String,l_Number,l_show)
Dim ok
If Len(l_String)>=l_Number Then
  ok
=Left(l_String,l_Number) & l_show
Else
  ok
=l_String
End If
DelTitle
=ok
End Function


%>

<%

 
dim str

 str
= "<strong><font color=""#FF0000"">下面就是截取后文章的部分内容,但文中有标签,如何才能去掉标签?<br /></font></strong><font color=""#FF0000"">在DW中我</font>用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了,很不好看,就像去除HTML那样的效果,现在我想&lt;BR&gt;把这些标签都过滤掉,也就是说,就只显示文  字,&lt;IMG style<font color=""#990033"">=&quot;WIDTH: 192px; HEIGHT: 138px&quot; height=6</font>00src=&quot;/eWebEditor/UploadFile/201098204055477.jpg width=796 border=0&gt;不要把那些也标签显示出来,插入图片显示不出来,只显示代码········截取字符串的代码请看idn<font color=""#FF0000"">ex.asp或记事本,  应该怎么改?后台</font>修改页面是&lt;FONT  face=Verdana&gt;hxg-scgk.asp。&lt;/FONT&gt;本人菜鸟,请大家帮帮忙·····谢谢!!!&lt;BR&amp;gt;DW中我用一个插件来截取部分文章内容,但是截取后,把那些标签什么都显示出来了…"



 response.write DelTitle(closeHTML(str),
450,"...")&"<br>"
%>

也尝试一下这个。。自动闭合HTML,截取了指定的内容。保留了行距,颜色等一些样式。。
这个闭合HTML的是pjblog博客程序里的。^_^...

有朋友使用过好像有些问题。。http://www.  你参考一下。
觉得麻烦就新建一个字段,保留摘要。。

[ 本帖最后由 lele2007 于 2010-9-10 14:41 编辑 ]
#14
tepnidh2010-09-10 15:00
回复 13楼 lele2007
谢谢您耐心细致地指点!感动。。。我会好好研究的!请慢用。。。
#15
hams2010-09-10 15:13
DelHtml过滤HTML代码会保留回车字符,如果去掉全部HTML字符可以使用FilterHtml。
#16
hams2010-09-10 15:15
网上有人这么写:

Function delHtml(strHtml) '做了一个函数名叫delhtml

Dim objRegExp, strOutput
Set objRegExp = New Regexp ' 建立正则表达式

objRegExp.IgnoreCase = True ' 设置是否区分大小写
objRegExp.Global = True '是匹配所有字符串还是只是第一个
objRegExp.Pattern = "(<[a-zA-Z].*?>)|(<[\/][a-zA-Z].*?>)" ' 设置模式引号中的是正则表达式,用来找出html标签

strOutput = objRegExp.Replace(strHtml, "") '将html标签去掉
strOutput = Replace(strOutput, "<", "<") '防止非html标签不显示
strOutput = Replace(strOutput, ">", ">")
delHtml = strOutput

Set objRegExp = Nothing
End Function

'srt1是你要去除html代码字符串,可以其它任何地方读取过来。
str1 = "<meta http-equiv=""refresh"" content=""0;URL=apple/default.htm""><title>正</3>在转到 ... ...</title>"
'应用函数
Response.Write(delHtml(str1))
#17
hams2010-09-10 15:16
还有这样写的:

ASP 过滤HTML函数代码:

<%'过滤HTML代码
Function ClearHTML(strHTML)
Dim objRegExp, Match, Matches
Set objRegExp = New Regexp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "<.+?>"
Set Matches = objRegExp.Execute(strHTML)
For Each Match in Matches
strHtml=Replace(strHTML,Match.Value,"")
Next
ClearHTML=strHTML
Set objRegExp = Nothing
End Function
%>

用法:

Response.write ClearHTML(Rs("text"))


<%=left(CleanHTML(rs("text")),70)%>


显示的时候,回车、等都会被当着空格对待,而且多个连续的空格只显示一个空格。
#18
tepnidh2010-09-10 16:49
回复 17楼 hams
多谢,学生感激不尽!
#19
tepnidh2010-09-10 16:53
回复 12楼 lele2007
在数据库里新建一个字段。。主要用于保存文章的摘要。。”简单易行,的确是一个不错的办法!谢谢!
1