Avatar billede lightbrain Nybegynder
06. juli 2002 - 21:10 Der er 30 kommentarer og
2 løsninger

Specialtegn

Hej

Mit spørgsmål går ud på, hvordan man undgår, at browseren fejlagtigt læser specialtegn som kode, når en bruger har lavet et indlæg, hvor vedkommende f.eks. har brugt "-tegnet.

Jeg tænker her specielt på, hvordan koden ser ud for indlæsningen af objeterne fra database til array - altså den problematiske håndtering af specialtegn.
Avatar billede hells Nybegynder
06. juli 2002 - 21:15 #1
udskift tegnene, før du indsætter det i databasen. Så undgår du også sql-fejl pga apostroffer. Det gøres sådan her:
indlaeg = Request.Form("indlaeg")
indlaeg = Replace(indlaeg,"'","''")

kan også bruges til større-end og mindre-end osv:
indlaeg = Replace(indlaeg,"<","&lt;")
Avatar billede lightbrain Nybegynder
06. juli 2002 - 21:18 #2
Ok, er der andre tegn, som er relevante?
Avatar billede hells Nybegynder
06. juli 2002 - 21:21 #3
jeps, såsom: æ,ø,å,Æ,Ø,Å,",linieskift,mellemrum,>
linieskift udskiftes sådan her:

indlaeg = Replace(indlaeg,vbCrlf,"<br />")

det er den mest specielle. Hvad ovenstående skal udskiftes til kan du se her:
http://www.html.dk/dokumentation/tegn/
Avatar billede lightbrain Nybegynder
06. juli 2002 - 21:25 #4
Nu skriver du, at de skal udskiftes før de sendes ned i databasen, men skal de så ikke også "laves tilbage igen", når de senere skal hentes fra databasen og bruges?
Avatar billede hells Nybegynder
06. juli 2002 - 21:28 #5
nej, de laves om til det, de skal være for at de kan vises på skærmen. De skal kun ændres en gang
Avatar billede lightbrain Nybegynder
06. juli 2002 - 21:41 #6
Ok, men hvordan kan det så være, at det som hentes fra databasen, kommer til at se således ud:

God quot;danskquot; mad

i stedet for: God "dansk" mad

______________

function ReplaceMy (replaceStr)

  ReplaceMy = Replace(replaceStr, """", "quot;")
 
end function
Avatar billede hells Nybegynder
06. juli 2002 - 21:44 #7
Det er fordi, der mangler et &. koden for " er nemlig &quot;. Det er altisd noget med &.

så altså:
function ReplaceMy (replaceStr)

  ReplaceMy = Replace(replaceStr, """", "&quot;")
 
end function
Avatar billede lightbrain Nybegynder
06. juli 2002 - 21:54 #8
Det hjalp ikke så meget, for nu skriver den i stedet:

God &quot;dansk&quot; madlavning

Måske er indlæsningen fra database til array forkert?

response.write "gruppe[1][" & i & "]=new artikel (""" & rs("artikelnr") & """,""" & rs("titel") & """,""" & rs("forfatter") & """, """ & rs("beskrivelse") & """, """ & rs("filnavn") & """, """ & rs("emnenr") & """, """ & rs("niveau") & """);"
Avatar billede hells Nybegynder
06. juli 2002 - 22:05 #9
Det burde altså virke. Ellers så med talkoden, &#34;, i stedet for &quot;
Avatar billede lightbrain Nybegynder
06. juli 2002 - 22:17 #10
Nu har jeg prøvet med 2 specialtegn, men ingen af dem virkede - hvorfor?

function ReplaceMy (replaceStr)

    replaceStr = Replace(replaceStr, Chr(34), "&quot;")
      replaceStr = Replace(replaceStr, Chr(38), "&amp;")
     
      ReplaceMy = replaceStr
 
end function

.
.
.
strSQL = "INSERT INTO ARTIKLER (titel, forfatter, beskrivelse, filnavn, emnenr, niveau, dato) VALUES ('" & ReplaceMy(Request.form("titel")) & "','" & Request.form("forfatter") & "','" & Request.form("beskrivelse") & "','" & Request.form("filnavn") & "','" & Request.form("emne") & "','" & Request.form("niveau") & "','" & Now() & "')"
Avatar billede hells Nybegynder
06. juli 2002 - 22:23 #11
hvis du har brugt denne her hele tiden, ved jeg vist, hvad fejlen er:
function ReplaceMy (replaceStr)

    replaceStr = Replace(replaceStr, Chr(34), "&quot;")
      replaceStr = Replace(replaceStr, Chr(38), "&amp;")
     
      ReplaceMy = replaceStr
 
end function

Når du også laver & om, så det kan vises på skærmen, kan du ikke bruge det til at vise specialtegn.
Hvis du vil erstatte &-tegnene, bør du nok gøre det allerførst, så specialtegnene bliver vist i stedet for koderne for dem.
Prøv i stedet med dette:
function ReplaceMy (replaceStr)

      replaceStr = Replace(replaceStr, Chr(38), "&amp;")
      replaceStr = Replace(replaceStr, Chr(34), "&quot;")
     
      ReplaceMy = replaceStr
 
end function
Avatar billede hells Nybegynder
06. juli 2002 - 22:26 #12
Når du udskifter & med &amp til sidst, kommer der jo faktisk til at stå &amp;quot; i stedet for &quot;
Avatar billede lightbrain Nybegynder
06. juli 2002 - 22:34 #13
Det har jeg også prøvet nu, men den skriver stadig det samme.

Ligger fejlen i stedet ikke i indsættelsen eller hentning?

INDSÆTNING:
(jeg har hele tiden testet det på "titel")
strSQL = "INSERT INTO ARTIKLER (titel, forfatter, beskrivelse, filnavn, emnenr, niveau, dato) VALUES ('" & ReplaceMy(Request.form("titel")) & "','" & Request.form("forfatter") & "','" & Request.form("beskrivelse") & "','" & Request.form("filnavn") & "','" & Request.form("emne") & "','" & Request.form("niveau") & "','" & Now() & "')"

HENTNING:
response.write "gruppe[1][" & i & "]=new artikel (""" & rs("artikelnr") & """,""" & rs("titel") & """,""" & rs("forfatter") & """, """ & rs("beskrivelse") & """, """ & rs("filnavn") & """, """ & rs("emnenr") & """, """ & rs("niveau") & """);"
Avatar billede hells Nybegynder
06. juli 2002 - 22:42 #14
jeg ved ikke, om det er det, men prøv at lave en variabel, der hedder titel, der indeholder Request.Form("titel"):
titel = Request.Form("titel")
strSQL = "INSERT INTO ARTIKLER (titel, forfatter, beskrivelse, filnavn, emnenr, niveau, dato) VALUES ('" & ReplaceMy(titel) & "','" & Request.form("forfatter") & "','" & Request.form("beskrivelse") & "','" & Request.form("filnavn") & "','" & Request.form("emne") & "','" & Request.form("niveau") & "','" & Now() & "')"
Avatar billede lightbrain Nybegynder
07. juli 2002 - 10:19 #15
Det gav det samme resultat - ingen forskel. Så må fejlen i stedet ligge i hentnings-koden. Ik?
Avatar billede lightbrain Nybegynder
07. juli 2002 - 10:39 #16
Jeg lukker dette spørgsmål nu og opretter et nyt mere målrettet spg., så hvis du trykker svar, vil jeg give dig 15 points for din hjælp, som har bragt mig tættere mod en løsning af problemet.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 10:54 #17
Du skal være velkomme til svare på - http://www.eksperten.dk/spm/233219 - hvor jeg håber på, at andre eksperter vil kommentere/udbygge mit kode-eksempel.
Avatar billede hells Nybegynder
07. juli 2002 - 13:39 #18
ok - svar
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:39 #19
>>Hells, please help! :-) http://www.eksperten.dk/spm/233219 (60 points)

Problemet er, at hvis jeg henter en titel, som hedder følgende - God "dansk" mad - nede i databasen, og jeg udskriver den til skærmen via ...

response.write "alert(" & server.HTMLencode(rs("titel")) & ");"

... så siger den: Error: Expected ')'

Fjerner jeg så apostrofferne nede i databasen (fordi den åbentbart mistolker dem), skriver den: Error: 'God' is undefined.
Avatar billede hells Nybegynder
07. juli 2002 - 15:41 #20
Så prøv med:
response.write "alert(""" & server.HTMLencode(rs("titel")) & """);"
Der kom lige noglæe citationstegn med.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:46 #21
Gjort, men så skriver den følgende i popup-boksen:

God &quot;dansk&quot; madlavning

(Den skulle skrive: God "dansk" mad - lige som der står nede i databasen)
Avatar billede hells Nybegynder
07. juli 2002 - 15:51 #22
en lidt ny metode, men prøv dn lige:
Response.Write "var titel = """ & rs("titel") & """"
Response.Write "alert(titel.Replace(""&amp;"",""&""))"

ellers så prøv dette:
Response.Write "var titel = """ & rs("titel") & """"
Response.Write "alert(titel.Replace(""&#34;"",""&""))"
Avatar billede lightbrain Nybegynder
07. juli 2002 - 16:05 #23
Den siger: Error: Expected: ';'

DEN GENEREREDE HTML KODE:
<html>

<head>
</head>

<body>

<script>var titel = "God "dansk" mad"alert(titel.Replace("&amp;","&"))</script>

</body>

</html></script>

</body>

</html>

MIN KODE:
<html>

<head>
</head>

<body>

<!--#include file ="../database/databaseConn.asp"-->

<%
response.write "<script>"
strSQL = "select * from ARTIKLER"
set rs = Conn.execute(strSql)

Response.Write "var titel = """ & rs("titel") & """"
Response.Write "alert(titel.Replace(""&amp;"",""&""))"

response.write "</script>"
Conn.close
%>

</body>

</html>
Avatar billede hells Nybegynder
07. juli 2002 - 16:09 #24
lidt rettelser:
Response.Write "var titel = """ & Server.HTMLEncode(rs("titel")) & """;"
Response.Write "alert(titel.Replace(""&amp;"",""&""))"

eller:
Response.Write "var titel = """ & Server.HTMLEncode(rs("titel")) & """;"
Response.Write "alert(titel.Replace(""&34;"",""&""))"
Avatar billede lightbrain Nybegynder
07. juli 2002 - 16:15 #25
Ved begge forslag, skriver den: object doesn't support this property or metode

DEN GENEREREDE HTML KODE:
<html>

<head>
</head>

<body>

<script>var titel = "God &quot;dansk&quot; mad";alert(titel.Replace("&amp;","&"))
Avatar billede hells Nybegynder
07. juli 2002 - 16:23 #26
Den ser da ellers ud til at du bare skal udelade replace:
Response.Write "alert(""" & Server.HTMLEncode(rs("titel")) & """);"
det bør virke, hvis " bliver &quot;, men det var var da vist det, der ikke virkede før.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 16:29 #27
Hermed gjort, så skriver den følgende i popup-boksen:

God &quot;dansk&quot; madlavning

MIN KODE:
<html>

<head>
</head>

<body>

<!--#include file ="../database/databaseConn.asp"-->

<%
response.write "<script>"
strSQL = "select * from ARTIKLER"
set rs = Conn.execute(strSql)

Response.Write "alert(""" & Server.HTMLEncode(rs("titel")) & """);"

response.write "</script>"
Conn.close
%>

</body>
</html>
Avatar billede hells Nybegynder
07. juli 2002 - 16:40 #28
enten:
titel = Server.HTMLEncode(rs("titel"))
titel = Replace(titel,"&amp;","&")
titel = Replace(titel,"&34;","&")

Response.Write "document.write(""" & titel & """);"

eller:
titel = rs("titel")
titel = Replace(titel,chr(34),"&quot;")

Response.Write "document.write(""" & titel & """);"
Avatar billede lightbrain Nybegynder
07. juli 2002 - 16:47 #29
DET VIRKER!!!!!!!!!!!!!!!!!!!!!! :-)

Super mange, mange, mange tak for det. Jeg har brugt mere end en weekend på at finde løsningen, og jeg var næsten ved at give op.

Kopier og indsæt lige ovenstående kommentar i http://www.eksperten.dk/spm/233219 og jeg skal lige dig points.
Avatar billede hells Nybegynder
07. juli 2002 - 16:50 #30
ok, og godt det virker
Avatar billede lightbrain Nybegynder
07. juli 2002 - 17:35 #31
Det virkede dog ikke med et array - prøv lige at se bunden af http://www.eksperten.dk/spm/233219 hvis ikke du allerede har set det.

Jeg vil frem over bruge http://www.eksperten.dk/spm/233219 til at komme med kommentarer i.
Avatar billede hells Nybegynder
07. juli 2002 - 17:37 #32
har set det
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