Avatar billede jannikf Nybegynder
10. oktober 2005 - 23:07 Der er 8 kommentarer og
1 løsning

Fjerne tags ved insert i asp

Da jeg netop har fået bikset en simpel gæstebog sammen, ønsker jeg nu at brugeren ikke har mulighed for at manipulere med siden vha. HTML og andre koder. Derfor ønsker jeg i min insert at alle tags bliver fjernet før de bliver indsat i databasen, men hvordan skal det gøres?

strSQL = "Insert into forum ("
strSQL = strSQL & "comment, "
strSQL = strSQL & "email, "
strSQL = strSQL & "location, "
strSQL = strSQL & "name, "
strSQL = strSQL & "dato) "

strSQL = strSQL & "values( "

strSQL = strSQL & "'" & replace(Request.Form("comment"),"'","''") & "', "
strSQL = strSQL & "'" & replace(Request.Form("email"),"'","''") & "', "
strSQL = strSQL & "'" & replace(Request.Form("location"),"'","''") & "', "
strSQL = strSQL & "'" & Request.Form("name") & "', "
strSQL = strSQL & "'" & Request.Form("dato") & "')"

Conn.Execute(strSQL)

Response.Redirect("forum.asp")

Jeg ved at man sikkert kan bruge noget replace ligesom jeg har gjort, men jeg kan ikke gøre det så omfattende som der kræves.
Avatar billede polle007 Nybegynder
10. oktober 2005 - 23:24 #1
Set re = New RegExp
re.Global = True
re.Pattern = "<[^>]*>"

output1 = re.Replace(input1, "")
output2 = re.Replace(input2, "")
...

Hvis du gerne vil have det vist, men ikke fortolket, kan du bruge HTMLEncode
output1 = Server.HTMLEncode(input1)
output2 = Server.HTMLEncode(input2)
Avatar billede softspot Forsker
10. oktober 2005 - 23:32 #2
Prøv evt. med denne stump kode:

function stripTags(strText)
  iPosEnd = 1
  iPos = instr(iPosEnd, strText, "<")
  do while iPos > 0
    iPosEnd = instr(iPos, strText, ">")
   
    if iPos > 1 then
      strLText = left(strText, iPos-1)
    else
      strLText = ""
    end if
   
    if len(strText) - iPosEnd > 0 then
      strRText = right(strText, len(strText) - iPosEnd)
    else
      strRText = ""
    end if
   
    strText = strLText & strRText
    iPos = instr(iPos, strText, "<")
  loop

  stripTags = strText
end function
Avatar billede softspot Forsker
10. oktober 2005 - 23:33 #3
...men regular expressions er jo altid smartere (og ganske givet hurtigere) :)
Avatar billede jannikf Nybegynder
12. oktober 2005 - 17:55 #4
softspot:
Dvs. jeg skal bruge denne kode når jeg indsætter teksten fra db ind på siden? og ikke når den bliver lagt ind på db?
Avatar billede jannikf Nybegynder
12. oktober 2005 - 17:57 #5
Polle007:
Jeg har svært ved at forstå hvad jeg skal gøre med den tekst, hvori skal den indsætte i min asp tekst, der indsætter i db?
Avatar billede softspot Forsker
12. oktober 2005 - 18:30 #6
Funktionen fjerner bare tags, om du vælger at gøre det før du lægger teksten i databasen eller når du henter data er op til dig. Jeg vil dog anbefale at du fjerner tags når du lægger data i databasen, hvis du ikke skal bruge dem på noget tidspunkt fremover...
Avatar billede jannikf Nybegynder
15. oktober 2005 - 21:12 #7
Hm har gjort sådan:

strComment = Request.Form("comment")
function stripTags(strComment)
  iPosEnd = 1
  iPos = instr(iPosEnd, strComment, "<")
  do while iPos > 0
    iPosEnd = instr(iPos, strComment, ">")
   
    if iPos > 1 then
      strLComment = left(strComment, iPos-1)
    else
      strLComment = ""
    end if
   
    if len(strComment) - iPosEnd > 0 then
      strRComment = right(strComment, len(strComment) - iPosEnd)
    else
      strRComment = ""
    end if
   
    strComment = strLComment & strRComment
    iPos = instr(iPos, strComment, "<")
  loop

  stripTags = strComment
end function

strSQL = "Insert into forum ("
strSQL = strSQL & "comment, "
strSQL = strSQL & "email, "
strSQL = strSQL & "location, "
strSQL = strSQL & "name, "
strSQL = strSQL & "dato) "

strSQL = strSQL & "values( "

strSQL = strSQL & "'" & strComment & "', "
strSQL = strSQL & "'" & replace(Request.Form("email"),"'","''") & "', "
strSQL = strSQL & "'" & replace(Request.Form("location"),"'","''") & "', "
strSQL = strSQL & "'" & Request.Form("name") & "', "
strSQL = strSQL & "'" & Request.Form("dato") & "')"

Conn.Execute(strSQL)

Response.Redirect("forum.asp")


Men når jeg indrykker så tager den stadig teksten med. Hvad har jeg gjort galt?
Avatar billede jannikf Nybegynder
15. oktober 2005 - 21:22 #8
Har selv fundet en løsning:

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

tmpContent = Trim(Request.Form("comment"))

strSQL = "Insert into forum ("
strSQL = strSQL & "comment, "
strSQL = strSQL & "email, "
strSQL = strSQL & "location, "
strSQL = strSQL & "name, "
strSQL = strSQL & "dato) "

strSQL = strSQL & "values( "

strSQL = strSQL & "'" & Replace(RemoveHTML(tmpContent), vbCrLf, "") & "', "
strSQL = strSQL & "'" & replace(Request.Form("email"),"'","''") & "', "
strSQL = strSQL & "'" & replace(Request.Form("location"),"'","''") & "', "
strSQL = strSQL & "'" & Request.Form("name") & "', "
strSQL = strSQL & "'" & Request.Form("dato") & "')"

Conn.Execute(strSQL)

Response.Redirect("forum.asp")

Fra http://www.eksperten.dk/spm/223312
Avatar billede softspot Forsker
15. oktober 2005 - 21:31 #9
Grunden til at koden fra 15/10-2005 21:12:25 ikke fungerede er fordi du ikke kaldte funktionen - så kan den jo ikke fjerne tags for dig ;)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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