加载中...
 
 
·新手指南 ·常见问题 ·资源下载
您现在的位置:网站首页 >> 客服中心 >> 常见问题 >> 虚拟主机 >> 正文  
asp如何去除html标记

方法一 : 禁用HTML
最简单的方法是直接禁用html标签而不用移除它们. 可以使用Replace()函数. 例如:
strText = Replace(strText, "<script", "&lt;script", 1, -1, 1)
或者直接禁用所有的html: 
strText = Replace(strText, "<", "&lt;")
这样做虽然很安全,但显得不够友好.(用户提交的文本会变得难以阅读) 
方法二: 使用"<"和">"
怎样使得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


添加日期:2008/09/15 访问数量:次 关键字:
上一篇: 下一篇:
相关问题
 
技术支持联系方式
 
服务热线:010-82893752
服务邮箱:help@itnewsun.com
服务QQ:69991000
小提示:
1.在咨询服务热线前,请准备好您在瑞达智创注册的用户名;
2.在向服务邮箱发信时,请在邮件标题前加注:“瑞达智创”,并在邮件中注明您的用户名;
3.我们不会以任何方式向您询问密码。
 
关于我们 | 联系我们 | 诚聘英才 | 会员注册 | 友情链接 | 网站地图 | 官方博客
联系地址:北京市朝阳区慧忠北里314号天创世缘D2座910 邮编:100012 服务热线:010-82893752
Copyright 2007-2008 北京网站建设-瑞达智创(ItNewSun.com) 版权所有