移除HTML标签

方法一 : 禁用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, "");
}

关于正则表达式可以参考: http://developer.netscape.com/docs/manuals/js/client/jsguide/regexp.htm.

现在回到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

时间: 2024-10-02 23:14:42

移除HTML标签的相关文章

苹果OSX上怎么移除Safari 标签页的浏览记录图标?

  当你在 OS X Yosemite 上点击进入 Safari 的 地址栏 时,通常窗口下面就会显示一列网页浏览标签,点击这些记录图标可以快速浏览网页,但有时候用户会觉得看起来太杂乱.想要移除这些图标其实很简单,和 LaunchPad 及 iOS 系统的操作方法大同小异. 1.点击 Safari 的地址栏,书签图标都会出现. 2.点击想要移除的图标,不要松手,将其拉出书签页面,再拖出浏览器窗口. 3.按同样操作方法移除其他标签 4.还可以使用此方法重新调整 Safari 书签页里各图标的位置,

移除HTML标签的正则表达式_正则表达式

复制代码 代码如下: ' 模块名: RemoveHTML ' 功 能 : 移除HTML标签 ' 输入值: HTML代码 ' 返回值: 字符串 Function RemoveHTML(ByVal strHTML) Dim objRegExp, Match, Matches set objRegExp = New RegExp Dim str: str = strHTML objRegExp.IgnoreCase = True objRegExp.Global = True objRegExp.Pa

移除HTML标签的正则表达式

复制代码 代码如下: ' 模块名: RemoveHTML ' 功 能 : 移除HTML标签 ' 输入值: HTML代码 ' 返回值: 字符串 Function RemoveHTML(ByVal strHTML) Dim objRegExp, Match, Matches set objRegExp = New RegExp Dim str: str = strHTML objRegExp.IgnoreCase = True objRegExp.Global = True objRegExp.Pa

Firefox 开发者开发扩展代替将被移除的标签组

Mozilla去年11月宣布, 作为Firefox "Go Faster"计划的一部分,它开始移除没多少人使用但又需要费力维护的特性.首批被移除的功能是"标签页组"和"完整主题"功能,移除的理由是没有多少 用户使用,用户数量与投入的工作量不成比例."标签页组"将在计划于今天发布的Firefox 45中移除,如果用户想要继续使用这项功能,他们需要及时去下载一位开发者开发的扩展Tab Groups.该扩展是"标签页组&q

利用正则表达式移除Html标签(Javascript)

javascript|正则 function StripHtml(html) ...{    html = html  || "";    var scriptregex = "<scr" + "ipt[^>.]*>[sS]*?</sc" + "ript>";    var scripts = new RegExp(scriptregex, "gim");    html =

WORDPRESS标签云和列表移除指定ID不显示

WordPress的标签页和列表挂件,如果想把某些标签或列表不予显示,可以使用如下两个钩子方法实现,具体代码如下: //移除部分标签不在标签云显示 function remove_tags($args){  $new_args = array(    'exclude' => '30,40,128,131,83',   );  return array_merge($args,$new_args); } add_filter( 'widget_tag_cloud_args', 'remove_t

php实现过滤表单提交中html标签的方法

 有时候我们做的简单评论功能会发现有提交很多的html标签,这些标签会导致页面有一些外连的情况,下面我们一起来看在php中过滤表单提交的html标签方法. 近评论中有一些机器人提交的post链接,都是一些垃圾评论.为了减少这种无谓的链接内容出现,其实是可以用php来删除表单POST提交的html标签,这样机器提交的信息也不会得到他们要的结果.而且可以减少来自seo/seo.html" target="_blank">搜索引擎的惩罚. 这里以去掉<br/>标签

【自定义标签开发】01-标签简介和开发第一个标签

自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码. 要使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1.编写一个实现Tag接口的java类,把页面java代码移到这个java类中(标签处理器类). 2.编写标签库描述(tld)文件,在tld文件中把标签处理器类描述成一个标签. 我们接下来写一个小例子来对自定义标签的开发做一个入门了解 快速入门:使用标签输出客户机IP 我们在MyEclipse中创建一个名为JspTest的Web project,然后改写它

Gmail标签加入新功能用户可更便利、直观地使用标签

北京时间7月2日上午消息,据国外媒体报道,谷歌于当地时间周三针对Gmail标签添加一系列新功能,以方便用户更好地利用标签代替文件夹对电子邮件进行分类和组织. 借助这些变化,用户可以更为便利.直观地使用标签.虽然文件夹已经是最为普遍的电子邮件归类方式,但谷歌却一直没有提供这一功能. Gmail产品经理托德·杰克逊(Todd Jackson)说:"我们一直都致力于提升Gmail中的标签功能,从而为人们组织邮件提供便利." 对于为何迟迟不肯推出文件夹功能,谷歌一直辩护说,标签比文件夹更好,因