asp中如何去掉HTML標記

來源:互聯網
上載者:User
方法一 : 禁用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, "");
}

關於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

若不用Regex,下面的函數可以達到同樣的目的:

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
---------------------------------------------

註:以上是我翻譯的 www.codeproject.com 上的一篇老外的文章,自認為比較好。

--------------------------------------------

Function stripHTML(strtext)
dim arysplit,i,j, strOutput
arysplit=split(strtext,"<")
if len(arysplit(0))>0 then j=1 else j=0
for i=j to ubound(arysplit)
  if instr(arysplit(i),">") then
    arysplit(i)=mid(arysplit(i),instr(arysplit(i),">")+1)
  else
    arysplit(i)="<" & arysplit(i)
  end if
next
strOutput = join(arysplit, "")
strOutput = mid(strOutput, 2-j)
strOutput = replace(strOutput,">",">")
strOutput = replace(strOutput,"<","<")

stripHTML = strOutput
End Function

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.