asp怎样去除文章中的html代码

我的asp网站想从数据库中读取一片文章然后截取前100个文字,但是文章是带有格式的,简单的用left函数会截取部分代码,导致格式错乱。请高人指点迷津:例如:将<p><fo... 我的asp网站想从数据库中读取一片文章然后截取前100个文字,但是文章是带有格式的,简单的用left函数会截取部分代码,导致格式错乱。
请高人指点迷津:
例如:将<p><font style="color:red">我的问题谁来解决</font></p>
变为:我的问题谁来解决
请不要用replace函数枚举代码而替换之。
展开
 我来答
PS一点学
2015-07-04 · 知道合伙人软件行家
PS一点学
知道合伙人软件行家
采纳数:1408 获赞数:11167
毕业于广东机电职业技术学院软件技术专业.IT行业2年从业经验,主要负责建站,SEO,营销.现任凯龙网络技术主管.

向TA提问 私信TA
展开全部
方法一 : 禁用HTML
最简单的方法是直接禁用html标签而不用移除它们. 可以使用Replace()函数. 例如:
strText = Replace(strText, "<script", "<script", 1, -1, 1)
或者直接禁用所有的html:
strText = Replace(strText, "<", "<")
这样做虽然很安全,但显得不够友好.(用户提交的文本会变得难以阅读)
方法二: 使用"<"和">"
怎样使得html标签从文本中消失呢? 我们可以去掉"<"和">"中间的所有内容
在JavaScript中这很简单:
function RemoveHTML( strText )
{
var regEx = /<[^>]*>/g;
return strText.replace(regEx, "");
}
现在回到VBScript, 对于Scripting引擎5.0或更高版本(可以通过调用ScriptEngineMajorVersion和ScriptEngineMinorVersion函数来检验版本),我们也可以使用RegExp物体:
Function RemoveHTML( strText )
Dim RegEx
Set RegEx = New RegExp
RegEx.Pattern = "<[^>]*>"
RegEx.Global = True
RemoveHTML = RegEx.Replace(strText, "")
End Function
若不用正则表达式,下面的函数可以达到同样的目的:
Function RemoveHTML( strText )
Dim nPos1
Dim nPos2
nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strText = Left(strText, nPos1 - 1) & Mid(strText, nPos2 + 1)
Else
Exit Do
End If
nPos1 = InStr(strText, "<")
Loop

RemoveHTML = strText
End Function
以上的方法虽然都可以去掉括号内的html标签,但是这些方法都存在以下问题:
首先,文本内的任何不表示html的尖括号会被去除.而且两个尖括号中间的文本也会被删掉.换句话说,在文本中插入任何"<"或">"都会出现不可预料的结果.
另外,这种方法不能控制删除哪些html标签.比如<b><i>这些无害的标签通常是允许的.
方法三:使用IE或其他工具
有很多缺点:
"It may be desirable to parse HTML files inside a Web server process in response to a browser page request. However, the WebBrowser control, DHTML Editing Control, MSHTML, and other Internet Explorer components may not function properly in an Active Server Pages (ASP) page or other application run in a Web server application." (http://support.microsoft.com/support/kb/articles/Q244/0/85.ASP?LN=EN-US&SD=gn&FR=0)
方法四:VBScript
以下的函数可以限制到具体的html标签
简介:
要控制被删除的标签列表,可以通过向TAGLIST常数中添加/删除标记来实现. 例如,要保留所有的<B>标签,则从TAGLIST中删除B. 当前的列表包含了MSDN中的所有html标签以及 LAYER 标签. 每个标签要用";"括起来.
开始标签和结束标签都会被删除,例如"<A...>"和</A...>
若标签同时在 TAGLIST 和 BLOCKTAGLIST 常数中,则起始标签和结束标签之间的所有内容都会被删除
没有结束标记的标签不被视为html标签,其内容不会被删除
块标签若没有结尾标记,从此标签开始到文本结束的所有内容会被删除
若"<!--"后跟的字符不是空格,注释标签不会被删除
使用这个函数很简单:
strPlainText = RemoveHTML(strTextWithHTML)
函数内容如下:
Function RemoveHTML( strText )
Dim TAGLIST
TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
"BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
"COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
"FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
"INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
"MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
"PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
"TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;"
Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
Dim nPos1
Dim nPos2
Dim nPos3
Dim strResult
Dim strTagName
Dim bRemove
Dim bSearchForBlock
nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")
nPos3 = InStr(strTagName, " ")
If nPos3 > 0 Then
strTagName = Left(strTagName, nPos3 - 1)
End If
If Left(strTagName, 1) = "/" Then
strTagName = Mid(strTagName, 2)
bSearchForBlock = False
Else
bSearchForBlock = True
End If

If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
bRemove = True
If bSearchForBlock Then
If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
nPos2 = Len(strText)
nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
If nPos3 > 0 Then
nPos3 = InStr(nPos3 + 1, strText, ">")
End If

If nPos3 > 0 Then
nPos2 = nPos3
End If
End If
End If
Else
bRemove = False
End If

If bRemove Then
strResult = strResult & Left(strText, nPos1 - 1)
strText = Mid(strText, nPos2 + 1)
Else
strResult = strResult & Left(strText, nPos1)
strText = Mid(strText, nPos1 + 1)
End If
Else
strResult = strResult & strText
strText = ""
End If

nPos1 = InStr(strText, "<")
Loop
strResult = strResult & strText

RemoveHTML = strResult
End Function
若绮彤ES
2010-12-24 · TA获得超过2928个赞
知道大有可为答主
回答量:4310
采纳率:100%
帮助的人:7218万
展开全部
我一直用下面这个函数
'****************************************************
'过程名:RemoveHTML
'作 用:过滤HTML标签
'参 数:strHTML
'****************************************************
Function RemoveHTML(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
'/////////////////////////////////////////////////////////
objRegExp.Pattern = "<.+?>"
'进行匹配

Set Matches=objRegExp.Execute(strHTML)

' 遍历匹配集合,并替换掉匹配的项目
For Each Match in Matches
strHtml=Replace(strHTML,Match.Value,"")
Next
'//////////////////////////////////////////////////////////
strHTML=replace(strHTML," ","")
strHTML=replace(strHTML," ","")
RemoveHTML=strHTML
Set objRegExp = Nothing
End Function
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
511718787
2010-12-24 · TA获得超过2645个赞
知道答主
回答量:208
采纳率:0%
帮助的人:185万
展开全部
<p><font style="color:red">我的问题谁来解决</font></p>

<p>xxxx</p> 这是一段文字“xxxx”

<font style="color:red">xxxx</font> 定义文字颜色为红色的“xxxx”

所以把<font x y z ...></font>去掉就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ragqe81
2010-12-25 · TA获得超过178个赞
知道答主
回答量:268
采纳率:0%
帮助的人:174万
展开全部
·<a href="news-6-<%=rs("c_id")%>.html" target="_blank" title="<%=rs("c_nam")%>">
<%if rs("c_tj")=1 or rs("c_tj")=3 then%>
<font color="#FF0000"><%=cutStr(rs("c_nam"),24)%></font>
<%else%>
<%=cutStr(rs("c_nam"),24)%>
<%end if%>
</a>

<br />
<%=cutStr(rs("c_con"),80)%>
<br />
<%
rs.movenext
loop
end if
rs.close
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hydonlee
2010-12-24 · TA获得超过590个赞
知道小有建树答主
回答量:859
采纳率:0%
帮助的人:427万
展开全部
用正则表达式替换。

EX:

Dim s
s = "<p><font style=""color:red"">我的问题谁来解决</font></p>"
MsgBox(removeHTML(s))

Function removeHTML(source)
Dim regex
Set regex = New RegExp
regex.Global = True
regex.Pattern = "<.*?>"
removeHTML = regex.Replace(source, "")
End Function
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式