Avatar billede ferdinan Nybegynder
10. april 2002 - 12:03 Der er 2 kommentarer og
1 løsning

Fjerne HTML

Jeg har lånt denne funktion til af fjerne HTML fra en streng, men nu vil jeg lige have at den ikke må fjerne <i> eller <em> er der en der kan gennemskue det?

Function RemoveHTML(strContent)
  Do
    pos = 1
    tmpBegin = InStr(pos,strContent,"<")
    If tmpBegin > 0 Then
      pos = tmpBegin
      If LCase(mid(strContent,tmpBegin,7)) = "<script" Then
        ' Her fjernes script kode
        tmpEnd = Instr(tmpBegin,LCase(strContent),"</script>")
        strContent = Left(strContent,tmpBegin-1) & Right(strContent,Len(strContent)-tmpEnd-8)
      ElseIf LCase(mid(strContent,tmpBegin,2)) = Chr(60) & "%" Then
        ' Her fjernes ASP kode
        tmpEnd = Instr(tmpBegin,LCase(strContent),"%" & Chr(62))
        strContent = Left(strContent,tmpBegin-1) & Right(strContent,Len(strContent)-tmpEnd-3)
      Else
        ' Her fjernes HTML kode
        tmpEnd = InStr(pos,strContent,">")
        If tmpEnd > 0 Then
          strContent = Left(strContent,tmpBegin-1) & Right(strContent,Len(strContent)-tmpEnd)
        Else
          strContent = Left(strContent,tmpBegin-1)
          Exit Do
        End If
      End If
    Else
      Exit Do
    End If
  Loop
  RemoveHTML = strContent
End Function


Ferdinan
Avatar billede a1a1 Novice
10. april 2002 - 12:08 #1
du kan "replace" fx. <i> med ##i## og </i> med ##/i## (i toppen af funktionen )

og så til slut replace ##i## med <i> osv....

:)
Avatar billede eagleeye Praktikant
10. april 2002 - 12:56 #2
hvis du kan vendte til i aften klokken 18 så kan jeg give dig en function hvor du med en streng kan angive hvilke HTML tags du vil beholde.
Avatar billede eagleeye Praktikant
10. april 2002 - 13:20 #3
Jeg fandt functionen lidt før, her er den så du kan se den:

Function RemoveHTML( strText )
  Const 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



------

Den fjerner som det er nu kun tags i et lag så man kan snyde functionen ved at skrive <<b>> det bliver efter man har kørt functionen til <b> altså en rigtig HTML tag. Det kan dog løses ved at kaldes function i et loop for at tjekke om der er nogle som forsøger at snyde... Din function har vist ikke umiddelbart det problem, det kunne være en sammenskrivning af de to function ville være godt.:

her er det loop du skal hvade i koden:

textToGuestbook = RemoveHTML(request.form("guestComment"))
textToGuestbook2 = textToGuestbook
runNo = 1
AttackLimit = 5
do
  textToGuestbook = textToGuestbook2
  textToGuestbook2 = RemoveHTML(textToGuestbook)
  runNo = runNo + 1
loop until (textToGuestbook = textToGuestbook2) OR (runNo = AttackLimit)

if (runNo < AttackLimit) then
  insert i datbase (textToGuestbook2)

------
Jeg har klippet koden fra min gæstebog.

De HTML tags du vil beholde skal fjernes fra:
const TAGLIST = ";!--;..................."

Så du fjerne bare I og EM fra listen TAGLIST sådan her:
  Const 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;EMBED;FIELDSET;FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;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;"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester