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