Avatar billede lightbrain Nybegynder
07. juli 2002 - 10:51 Der er 35 kommentarer og
3 løsninger

Problematiske specialtegn

Hej

Mit spørgsmål går ud på, hvordan koden ser ud for indsætning og hentning af objekter til og fra databasen - altså den problematiske håndtering af specialtegn, således at browseren ikke (mis)tolker dem som kode, hvorved den skaber en lind støm af fejl-meddelelser, hvis brugeren har været så fræk at submitte indlæg med specialtegn.

Jeg har følgende kode, som desværre udskriver følgende (jeg afprøver p.t. kun på titlen)...

God "dansk" mad

...i stedet for...

God "dansk" mad
_____________________________________________________

ÆNDRING/KONVERTERING AF SPECIALTEGN
function ReplaceMy (replaceStr)

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

INDSÆTNING:
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 keysersoze Ekspert
07. juli 2002 - 11:05 #1
i stedet for at lave en masse replace burde det være nok at bruge server.htmlencode...

altså i stedet for at udskrive posten vha rs("post") skal du udskrive den vha server.htmlencode(rs("post")) - så burde det kunne blive vist
Avatar billede lightbrain Nybegynder
07. juli 2002 - 11:19 #2
Det giver præcis det samme resultat:

God "dansk" mad

...i stedet for...

God "dansk" mad

(Jeg bruger Access database, hvis det har noget at sige)

Min kode ser nu således ud:

HENTNING:
response.write "gruppe[1][" & i & "]=new artikel (""" & rs("artikelnr") & """,""" & server.htmlencode(rs("titel")) & """,""" & rs("forfatter") & """, """ & rs("beskrivelse") & """, """ & rs("filnavn") & """, """ & rs("emnenr") & """, """ & rs("niveau") & """);"

INDSÆTNING:
strSQL = "INSERT INTO ARTIKLER (titel, forfatter, beskrivelse, filnavn, emnenr, niveau, dato) VALUES ('" & Request.form("titel") & "','" & Request.form("forfatter") & "','" & Request.form("beskrivelse") & "','" & Request.form("filnavn") & "','" & Request.form("emne") & "','" & Request.form("niveau") & "','" & Now() & "')"
Avatar billede keysersoze Ekspert
07. juli 2002 - 11:29 #3
det siger det giver der samme resultat... men var det ikke netop det resultat du skulle have?
Avatar billede lightbrain Nybegynder
07. juli 2002 - 11:33 #4
Nej, "God "dansk"" skulle gerne blive til "God "dansk" mad", men det gør det ikke - lige meget om jeg anvender replace-funktion eller htmlencode-funktionen.
Avatar billede krogstrup Nybegynder
07. juli 2002 - 11:37 #5
jeg forstår ikke helt dit problem...

Får du fejl hvis du blot udskriver posten med rs("post") uden at lave server.htmlencode eller replace ???
Avatar billede keysersoze Ekspert
07. juli 2002 - 11:39 #6
under normale omstændigheder burde du med server.htmlencode få lavet " om til " men alligevel få udskrevet "
Avatar billede krogstrup Nybegynder
07. juli 2002 - 11:40 #7
ja, " burde blive vist som " af browseren !
Avatar billede lightbrain Nybegynder
07. juli 2002 - 11:51 #8
Hvis der ligger en titel nede i database, som KUN består af et eneste "-tegn, som jeg så henter og udskriver, skriver den: "

response.write "alert(""" & server.HTMLencode(rs("titel")) & """);"
Avatar billede keysersoze Ekspert
07. juli 2002 - 12:01 #9
du bruger ekstreemt mange unødige " i din kode... prøv engang med;

response.write "dette er titlen; " & server.htmlencode(rs("titel")) & ""
Avatar billede eagleeye Praktikant
07. juli 2002 - 12:58 #10
Du har din egen replace funtion hvor du selv laver " om til "

Denne linie er taget fra din func´tion som er vist i spørgsmålet:
  replaceStr = Replace(replaceStr, Chr(34), "&quot;")  '<-- " -> &quot;

Jeg forstår ikke helt problemmet, du skal da bare smide teksten fra din input direkte ned i databasen, uden at lave nogen konvertering. Det eneste du skal konvertere er en ' til to '' for at undgå SQL fejl.

Server.HTMLEncode laver " og andre tegn om til standart koder som &quot;.
Avatar billede sn0wflake Nybegynder
07. juli 2002 - 13:31 #11
Jeg tror at teksten i databasen er kodet *to* gange. F.eks.:

"test"

er kodet til

&quot;test&quot;

er igen kodet til

&amp;quot;test&quot;&amp;

hvilket ikke er så godt. Skriv venligst hvad der står i din database.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 14:01 #12
Hvis jeg skriver:

response.write (server.htmlencode(rs("titel")))

Siger den, at den streng, som hentes fra database, er ikke-defineret. Why?
Avatar billede lightbrain Nybegynder
07. juli 2002 - 14:38 #13
>>sn0wflake
>>Skriv venligst hvad der står i din database.
Der står kun reel tekst - f.eks.: God "dansk" madlavning
Avatar billede lightbrain Nybegynder
07. juli 2002 - 14:43 #14
>>eagleeye
Jeg har prøvet med at lave en replace-funktion, men det virkede heller ikke - det gav samme resultat, dvs.: God &quot;dansk&quot; mad i stedet for God "dansk" madlaving

I er nok alle sammen inde på noget af det rigtige mht. jeg bruger for mange "-tegn, men når jeg piller dem væk, bliver strengene, som hentes fra databasen, opfattet som en variabel, som er undefined - altså hvis jeg f.eks. skriver: response.write (server.htmlencode(rs("titel")))
Avatar billede eagleeye Praktikant
07. juli 2002 - 14:47 #15
Jeg er ikke med hvor giver det et problem, når du udskriver i browseren ?? så skulle der gerne så som "  eller??
Avatar billede keysersoze Ekspert
07. juli 2002 - 14:54 #16
hvordan ser det ud hvis du går op i vis -> kilde?
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:03 #17
>>eagleeye
>>hvor giver det et problem, når du udskriver i browseren ??
Korrekt.

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 dansk mad' is undefined.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:04 #18
>>keysersoze
>>vis -> kilde?
<script>alert(God &quot;dansk&quot; mad);
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:07 #19
Skriver jeg i stedet...

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

... kan jeg læse følgende i popboksen...

God &quot;dansk&quot; mad
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:09 #20
popboksen = popup-boksen
Avatar billede krogstrup Nybegynder
07. juli 2002 - 15:09 #21
hvordan ser teksten ud, hvis du udskriver den i selve BODY og IKKE i en javascript popup ???
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:14 #22
>>krogstrup
Jeg udskriver den allerede i body - dog inde i en ASP-sætning. Hvad havde du tænkt dig?
Avatar billede krogstrup Nybegynder
07. juli 2002 - 15:15 #23
jeg mener:
udskriver du den således

<body>
<%=udskrivning%>
</body>

eller

<body>
<script>alert('<%=udskrivning%>')</script>
</body>


????
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:18 #24
>>krogstrup
Den sidste
Avatar billede krogstrup Nybegynder
07. juli 2002 - 15:20 #25
prøv den første !
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:26 #26
>>krogstrup
Ok, jeg har nu skrevet det: response.write (server.htmlencode(rs("titel")))

Men det giver præcis det samme resultat: God &quot;dansk&quot; mad
Avatar billede lightbrain Nybegynder
07. juli 2002 - 15:28 #27
>Men det giver præcis det samme resultat: God &quot;dansk&quot; mad
Nej, det passer ikke. Hvis jeg har - God "dansk" mad - stående nede i databasen, skriver den: Error: 'God' is undefined.
Avatar billede keysersoze Ekspert
07. juli 2002 - 16:04 #28
prøv at kome med HELE din kode - så kan det være fejlen ligger et andet sted
Avatar billede lightbrain Nybegynder
07. juli 2002 - 16:10 #29
>>keysersoze
OK - her kommer hele koden:

HELE KODEN:
<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>

DEN GENEREREDE HTML KODE:
<html>

<head>
</head>

<body>

<script>alert("God &quot;dansk&quot; mad");</script>

</body>

</html>

MIN DATABASE:
God "dansk" mad
Avatar billede hells Nybegynder
07. juli 2002 - 16:50 #30
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:52 #31
>>hells
Det virker! :-)

Jeg vil lige afprøve det lidt mere, og så vender jeg tilbage med nogle points. :-)
Avatar billede keysersoze Ekspert
07. juli 2002 - 17:11 #32
problemet består formentlig i at du sætter det ind i et javascript og ikke udskriver det direkte - for skriver du

God &quot;dansk&quot; mad

i stedet for

<script>alert("God &quot;dansk&quot; mad");</script>

er der ingen problemer.
Avatar billede lightbrain Nybegynder
07. juli 2002 - 17:20 #33
Øv, æv osv... :-(

Hvis jeg skriver følgende, virker det, dvs. at den skriver God "dansk" mad:
Response.Write "document.write(""" & titel & """);"

MEN hvis jeg skriver følgende, virker det IKKE, dvs. at den indsætter i arrayet God &quot;dansk&quot; mad:
response.write "gruppe[1][" & i & "]=new artikel (""" & rs("artikelnr") & """,""" & titel & """,....

Konklusion:
Den kan godt finde ud af udskrive det, men ikke indsætte det i et array - hvorfor??????????
___________________________________________________________________________________

<html>
<head>
<script>

var gruppe = new Array();
gruppe[1] = new Array();

function artikel(artikelnr, titel, forfatter, beskrivelse, filnavn, emnenr, niveau, aendret) {
  this.artikelnr= artikelnr;
  this.titel= titel;
  this.forfatter= forfatter;
  this.beskrivelse= beskrivelse;
  this.filnavn= filnavn;
  this.emnenr= emnenr;
  this.niveau= niveau;
  this.aendret= aendret;

}

function IndlaesFoersteMenu () {

    test.artikel.options[1] = new Option( gruppe[1][1].titel, gruppe[1][1].artikelnr );
}

</script>
</head>
<body>


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

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

while not (rs.EOF OR rs.BOF)

    titel = Server.HTMLEncode(rs("titel"))
    titel = Replace(titel,"&amp;","&")
    titel = Replace(titel,"&34;","&")

    response.write "gruppe[1][" & i & "]=new artikel (""" & rs("artikelnr") & """,""" & titel & """,""" & rs("forfatter") & """, """ & rs("beskrivelse") & """, """ & rs("filnavn") & """, """ & rs("emnenr") & """, """ & rs("niveau") & """);"
    Response.Write "document.write(""" & titel & """);"

    i = i + 1
    rs.MoveNext
wend

response.write "</script>"
Conn.close
%>
<form method="POST" name="test">
  <p><select size="7" name="artikel"></select><input type="checkbox" onClick="IndlaesFoersteMenu();" name="C1" value="ON"></p>
</form>
</body>
</html>
Avatar billede hells Nybegynder
07. juli 2002 - 17:39 #34
det må noget javascript gør ved det siden det virker uden involveren af javascript.
&quot; giver jo normalt også et " på skærmen
Avatar billede lightbrain Nybegynder
07. juli 2002 - 17:51 #35
Findes der ikke en "workaround"?

Jeg kan da næppe være den første, der vil indsætte en streng, hvori der er apostroffer, i et array.

>>keysersoze
Kan du bidrage her, du var nemlig inde på noget med ind- og direkte udskrivning, hvilket jeg ikke helt fattede.
Avatar billede keysersoze Ekspert
07. juli 2002 - 18:59 #36
problemer er lidt at du putter det ind i en javascript-funktion - lige umiddelbart _burde_ det være nok at lave en replace på tegnet ' til fx ´ og altså ikke noget med encode eller noget.

det er kun ved udskrivning af indhold til fx en tabel at det vil være relevant at bruge encode.
Avatar billede eagleeye Praktikant
08. juli 2002 - 10:17 #37
du skal ikke bruge Server.HTMLEncode i en alert box.. Den viser bare den tekst som er i strengen ..

response.write "alert(" & rs("titel") & ");"
Avatar billede keysersoze Ekspert
10. juli 2002 - 18:25 #38
hva' - hvordan går det her?
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