Avatar billede carstenandersen Nybegynder
12. februar 2013 - 11:42 Der er 25 kommentarer og
1 løsning

Tegnsætning

Hej eksperter

Jeg har følgende URL http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test16.asp hvor det ser ud til at tegnsætningen er forskellig i kildekode kontra visning. I kildekoden er den korrekt ... ×tamp=1360667510 ... mens den ved visning er ... ×tamp=1360667510 ... Noget bliver dermed vist som UTF-8, mens andet formentligt som ISO ....

Hvordan kan jeg få det hele til at være UTF-8?

Siden er oprettet som UTF-8 og dette på siden:

<%
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
Session.CodePage = 65001 ' UTF-8 code
%>

Jeg har læst og prøvet "alt", så håber virkelig, at I kan hjælpe.

På forhånd tak.

Sig endelig til, hvis I mangler noget kode.
Avatar billede keysersoze Guru
12. februar 2013 - 13:34 #1
Hvordan er dit dokument gemt? Hvordan er eventuelle data gemt? Hvordan udsender webhotellet koden?

http://www.web-dev.dk/post/2009/07/31/Korrekt-visning-af-specielle-karakterer-character-encoding.aspx
Avatar billede carstenandersen Nybegynder
12. februar 2013 - 14:11 #2
Jeg har rodet rigtig meget med tegnsætningen, og da nu nævner webhotellets "standard" husker jeg noget med, at de netop ikke bruger UTF-8. Jeg har derfor meget nøje fulgt artiklen du linker til, og lavet et nyt dokument http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test20.asp

Nu er det bare omvendt ;-) På siden står der nu korrekt ×tamp, mens der i kildekoden står &timestamp=

Nedenfor er hele kildekoden indsat:

<system.web>
  <globalization responseEncoding="utf-8" requestEncoding="utf-8" fileEncoding="utf-8" />
</system.web>
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<%

Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32

Private m_lOnBits(30)
Private m_l2Power(30)

m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647)

m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)

Private Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function

Private Function RShift(lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)

If (lValue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function

Private Function RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
End Function

Private Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult

lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000

lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)

If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If

AddUnsigned = lResult
End Function

Private Function F(x, y, z)
F = (x And y) Or ((Not x) And z)
End Function

Private Function G(x, y, z)
G = (x And z) Or (y And (Not z))
End Function

Private Function H(x, y, z)
H = (x Xor y Xor z)
End Function

Private Function I(x, y, z)
I = (y Xor (x Or (Not z)))
End Function

Private Sub FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount

Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448

lMessageLength = Len(sMessage)

lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)

lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop

lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE

lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)

lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)

ConvertToWordArray = lWordArray
End Function

Private Function WordToHex(lValue)
Dim lByte
Dim lCount

For lCount = 0 To 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function

Public Function MD5(sMessage)

Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim a
Dim b
Dim c
Dim d

Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21

x = ConvertToWordArray(sMessage)

a = &H67452301
b = &HEFCDAB89
c = &H98BADCFE
d = &H10325476

For k = 0 To UBound(x) Step 16
AA = a
BB = b
CC = c
DD = d

FF a, b, c, d, x(k + 0), S11, &HD76AA478
FF d, a, b, c, x(k + 1), S12, &HE8C7B756
FF c, d, a, b, x(k + 2), S13, &H242070DB
FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
FF d, a, b, c, x(k + 5), S12, &H4787C62A
FF c, d, a, b, x(k + 6), S13, &HA8304613
FF b, c, d, a, x(k + 7), S14, &HFD469501
FF a, b, c, d, x(k + 8), S11, &H698098D8
FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
FF b, c, d, a, x(k + 11), S14, &H895CD7BE
FF a, b, c, d, x(k + 12), S11, &H6B901122
FF d, a, b, c, x(k + 13), S12, &HFD987193
FF c, d, a, b, x(k + 14), S13, &HA679438E
FF b, c, d, a, x(k + 15), S14, &H49B40821

GG a, b, c, d, x(k + 1), S21, &HF61E2562
GG d, a, b, c, x(k + 6), S22, &HC040B340
GG c, d, a, b, x(k + 11), S23, &H265E5A51
GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
GG a, b, c, d, x(k + 5), S21, &HD62F105D
GG d, a, b, c, x(k + 10), S22, &H2441453
GG c, d, a, b, x(k + 15), S23, &HD8A1E681
GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
GG d, a, b, c, x(k + 14), S22, &HC33707D6
GG c, d, a, b, x(k + 3), S23, &HF4D50D87
GG b, c, d, a, x(k + 8), S24, &H455A14ED
GG a, b, c, d, x(k + 13), S21, &HA9E3E905
GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
GG c, d, a, b, x(k + 7), S23, &H676F02D9
GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A

HH a, b, c, d, x(k + 5), S31, &HFFFA3942
HH d, a, b, c, x(k + 8), S32, &H8771F681
HH c, d, a, b, x(k + 11), S33, &H6D9D6122
HH b, c, d, a, x(k + 14), S34,&HFDE5380C
HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
HH a, b, c, d, x(k + 13), S31, &H289B7EC6
HH d, a, b, c, x(k + 0), S32, &HEAA127FA
HH c, d, a, b, x(k + 3), S33, &HD4EF3085
HH b, c, d, a, x(k + 6), S34, &H4881D05
HH a, b, c, d, x(k + 9), S31, &HD9D4D039
HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
HH b, c, d, a, x(k + 2), S34, &HC4AC5665

II a, b, c, d, x(k + 0), S41, &HF4292244
II d, a, b, c, x(k + 7), S42, &H432AFF97
II c, d, a, b, x(k + 14), S43, &HAB9423A7
II b, c, d, a, x(k + 5), S44, &HFC93A039
II a, b, c, d, x(k + 12), S41, &H655B59C3
II d, a, b, c, x(k + 3), S42, &H8F0CCC92
II c, d, a, b, x(k + 10), S43, &HFFEFF47D
II b, c, d, a, x(k + 1), S44, &H85845DD1
II a, b, c, d, x(k + 8), S41, &H6FA87E4F
II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
II c, d, a, b, x(k + 6), S43, &HA3014314
II b, c, d, a, x(k + 13), S44, &H4E0811A1
II a, b, c, d, x(k + 4), S41, &HF7537E82
II d, a, b, c, x(k + 11), S42, &HBD3AF235
II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
II b, c, d, a, x(k + 9), S44, &HEB86D391

a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = AddUnsigned(c, CC)
d = AddUnsigned(d, DD)
Next

MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))

END FUNCTION

PUBLIC FUNCTION B64Encode(plain)

BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
dim nl

dim Base64EncMap(63)
dim Base64DecMap(127)

' init vars
nl = "<P>" & chr(13) & chr(10)
' setup base 64
dim max, idx
max = len(BASE_64_MAP_INIT)
for idx = 0 to max - 1
' one based string
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
next
for idx = 0 to max - 1
Base64DecMap(ASC(Base64EncMap(idx))) = idx
next

if len(plain) = 0 then
B64Encode = ""
exit function
end if

dim ret, ndx, by3, first, second, third
by3 = (len(plain) \ 3) * 3
ndx = 1
do while ndx <= by3
first  = asc(mid(plain, ndx+0, 1))
second = asc(mid(plain, ndx+1, 1))
third  = asc(mid(plain, ndx+2, 1))
ret = ret & Base64EncMap(  (first \ 4) AND 63 )
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
ret = ret & Base64EncMap( third AND 63)
ndx = ndx + 3
loop
' check for stragglers
if by3 < len(plain) then
first  = asc(mid(plain, ndx+0, 1))
ret = ret & Base64EncMap(  (first \ 4) AND 63 )
if (len(plain) MOD 3 ) = 2 then
second = asc(mid(plain, ndx+1, 1))
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) )
else
ret = ret & Base64EncMap( (first * 16) AND 48)
ret = ret & "="
end if
ret = ret & "="
end if

B64Encode = ret

END FUNCTION

FUNCTION HexToString(HexString)
HexChars = "0123456789abcdef"
HexToString = ""
for HexStringIndex = 1 to Len(HexString) step 2
HexToString = HexToString & Chr(CInt((16*(InStr(HexChars,Mid(HexString, HexStringIndex, 1))-1)) + (InStr(HexChars,Mid(HexString, HexStringIndex + 1, 1))-1)))
next
END FUNCTION

FUNCTION GetRequestUrl(UrlHost, UrlPath, AuthenticationId, AuthenticationKey)

// Replace " " with "+"
UrlPath = Replace(UrlPath," ", "+")

// Add Authentication Id
UrlPath = UrlPath & "&aid=" & AuthenticationId

// Get Timestamp
TimeStamp = DateDiff("s", "01/01/1970 00:00:00", Now())

// Add TimeStamp
UrlPath = UrlPath & "&timestamp=" & TimeStamp

// Get Authentication Token
AuthenticationTokenRAW = UrlPath & AuthenticationKey
AuthenticationTokenMD5 = MD5(AuthenticationTokenRAW)
AuthenticationTokenSTR = HexToString(AuthenticationTokenMD5)
AuthenticationTokenB64 = B64Encode(AuthenticationTokenSTR)

// Replace Characters
AuthenticationToken = Replace(AuthenticationTokenB64, " ","")
AuthenticationToken = Replace(AuthenticationToken, "/","_")
AuthenticationToken = Replace(AuthenticationToken, "=","-")
AuthenticationToken = Replace(AuthenticationToken, "+",".")
Response.Write("<ul>")
Response.Write("<li>TimeStamp: " & TimeStamp & "</li>")
Response.Write("<li>UrlHost: " & UrlHost & "</li>")
Response.Write("<li>UrlPath: " & UrlPath & "</li>")
Response.Write("<li>AuthenticationId: " & AuthenticationId & "</li>")
Response.Write("<li>AuthenticationKey: " & AuthenticationKey & "</li>")
Response.Write("<li>AuthenticationTokenRAW: " & AuthenticationTokenRAW & "</li>")
Response.Write("<li>AuthenticationTokenMD5: " & AuthenticationTokenMD5 & "</li>")
Response.Write("<li>AuthenticationTokenSTR: " & AuthenticationTokenSTR & "</li>")
Response.Write("<li>AuthenticationTokenB64: " & AuthenticationTokenB64 & "</li>")
Response.Write("<li>AuthenticationToken: " & AuthenticationToken & "</li>")
Response.Write("</ul>")

GetRequestUrl = UrlHost & UrlPath & "&hash=" & AuthenticationToken
Session("GetRequestUrl") = GetRequestUrl

END FUNCTION
%>

<%
GetRequestUrl"http://dk.shoppingapis.kelkoo.com", "/V3/productSearch?query=camping+italien&sort=default_ranking&start=1&results=20&show_products=1&show_subcategories=0&show_refinements=0" , "96943159", "vzJWa59E"
%>

<%
Response.Write Session("GetRequestUrl")
%>

</body>

</html>

Er opbygget i forhold til http://developer.kelkoo.com/samples/signing-url-asp/

Håber, at du gennemskue det :-)
Avatar billede keysersoze Guru
12. februar 2013 - 15:38 #3
Ligger de 3 første linjer i dit ASP-dokument? Det er ASP.NET og hører til i en web.config fil.
Avatar billede carstenandersen Nybegynder
12. februar 2013 - 16:12 #4
De ligger som de første 3 linier - syntes nok, at jeg ikke i classic asp før havde set denne kode ;-)

Har også prøvet noget ala:

<%
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
Session.CodePage = 65001 ' UTF-8 code
%>

men umiddelbart inget hjælper.

Kan du se, hvad der "mangler"?
Avatar billede keysersoze Guru
12. februar 2013 - 18:09 #5
Som nævnt i #1 mangler der ikke nødvendigvis kode - andre ting spiller også ind så du vil fx opleve fejl hvis dit dokument ikke er gemt som UTF-8.
Avatar billede carstenandersen Nybegynder
13. februar 2013 - 09:50 #6
Jeg har haft filen ovre i Notepad, og ved derfor, at den er gemt som UTF-8. Har derfor prøvet at slette alt andet end kildekoden fra Kelkoo. Herefter udskriver den korrekt på siden, men forkert i kildekoden. Hvordan kan både kildekode og visning på siden blive ens?

Har efterfølgende på filen forsøgt at udskrive Kelkoo URL med:

<%
    url = "" & Session("GetRequestUrl") & ""
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "GET", url, false
    xmlhttp.send ""
    Response.write xmlhttp.responseText
    set xmlhttp = nothing
%>

men det lykkedes ikke.

Er det muligt at "hyre" dig til at få filen til at virke?
Avatar billede keysersoze Guru
14. februar 2013 - 10:54 #7
Det kan jeg desværre ikke tilbyde. Har du prøvet at lægge en web.config-fil ind for at se om det kan give noget - eller evt overvejet at opdatere til en lidt mere tidssvarende teknologi, ASP.NET?
Avatar billede carstenandersen Nybegynder
14. februar 2013 - 12:41 #8
Jeg er "selv-lært" i classic asp, så web.config og aps.net er helt fremmede ord ;-) Bør nok tænke mere i dette, men indtil det sker må jeg nok desværre droppe dette foretagende. Smid et svar, og tusind tak for din hjælp.
Avatar billede keysersoze Guru
14. februar 2013 - 14:47 #9
der kom ingen løsning så ingen point til mig.
Avatar billede carstenandersen Nybegynder
14. februar 2013 - 15:41 #10
At der ikke kommer en løsning, er manglender kundskaber hos mig, og andeles ikke din hjælp, som har været rigtig god og nyttig, når jeg senere igen får kastet mig over problemet. Jeg syntes derfor, at du har fortjent pointene fuldt ud, og håber derfor, at du vil smide et svar ;-)
Avatar billede keysersoze Guru
16. februar 2013 - 11:09 #11
svar :)
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 12:18 #12
Jeg her ikke læst alle indlæg, men:

"Nu er det bare omvendt ;-) På siden står der nu korrekt ×tamp, mens der i kildekoden står &timestamp="

er en klassisk fejl. Hvis du skriver fx:

  <a href=".....noget.asp?a=3&timestamp=7913">

vil nogle browsere oversætte kodestumpen  "&times"  til det der lille x-tegn. Sådan har det altid været - ikke noget med utf-8 og venner.

Løsningen er at HTML-encode strengen, fordi det jo netop er HTML. Den skal, i betydningen skal, se sådan ud:

  <a href=".....noget.asp?a=3&amp;timestamp=7913">
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 12:37 #13
erikjakobsen, virkelig fedt med dit input :-)

Kan godt følge dig, men hvordan min kode lige skal "håndteres", kan jeg stadig ikke helt se ;-)

Sidst i koden (se indlæg #2):

......
......
Response.Write("<li>AuthenticationTokenB64: " & AuthenticationTokenB64 & "</li>")
Response.Write("<li>AuthenticationToken: " & AuthenticationToken & "</li>")
Response.Write("</ul>")

GetRequestUrl = UrlHost & UrlPath & "&hash=" & AuthenticationToken
Session("GetRequestUrl") = GetRequestUrl

END FUNCTION
%>

<%
GetRequestUrl"http://dk.shoppingapis.kelkoo.com", "/V3/productSearch?query=camping+italien&sort=default_ranking&start=1&results=20&show_products=1&show_subcategories=0&show_refinements=0" , "96943159", "vzJWa59E"
%>

<%
Response.Write Session("GetRequestUrl")
%>

......
......

dannes GetRequestUrl og Session("GetRequestUrl") og det er når, at jeg udskriver Session("GetRequestUrl"), at forskellen er der. Hvordan kan det ændres med HTML-encode?

Virkelig på forhånd tak :-)
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 13:20 #14
(igen - jeg har ikke læst det hele) Men, i linien

  // Add TimeStamp
  UrlPath = UrlPath & "&timestamp=" & TimeStamp

kunne du prøve med

  // Add TimeStamp
  UrlPath = UrlPath & "&amp;timestamp=" & TimeStamp
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 13:33 #15
Hvis jeg bruger:

UrlPath = UrlPath & "&timestamp=" & TimeStamp

er kildekoden korrekt, men ikke visningen, og hvis jeg bruger:

UrlPath = UrlPath & "&amp;timestamp=" & TimeStamp

er visningen korrekt, men ikke kildekoden ;-)

Jeg tror vist bare, at jeg skal prøve at finde en anden løsning, inden jeg bliver helt blå i hovedet ;-)

Tusind tak for din hjælp.
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 14:00 #16
Hvad mener du med det sidste: "...er visningen korrekt, men ikke kildekoden" ?
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 14:15 #17
Prøv http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test21.asp

Når du ser siden, er alt omkring timestamp skrevet som "&timestamp", mens hvis du siger "Vis kilde", er alt omkring timestamp skrevet som "&amp;timestamp"

Giver det mening?
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 14:21 #18
Jamen, så står det helt korrekt i HTML-koden. Det kan ganske enkelt ikke skrives på andre måder, hvis man vil kalde det HTML ;)
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 14:28 #19
Men det gælder så faktisk alle forekomster af &

Det er derfor forkert at skrive

productSearch?query=camping+italien&sort=default_ranking&start=1&results=20&show_products=1&show_subcategories=0&show_refinements=0&aid=96943159&amp;timestamp=1361024489&hash=WmdPZl1kMSExIlk5Y3NRZw--

hvor der står en række &-ere alene. De skal alle skiftes til &amp;

productSearch?query=camping+italien&amp;sort=default_ranking&start=1&amp;results=20&amp;show_products=1&amp;show_subcategories=0&amp;show_refinements=0&amp;aid=96943159&amp;timestamp=1361024489&amp;hash=WmdPZl1kMSExIlk5Y3NRZw--

(hvis jeg så lige fik dem alle med....) Og det er faktisk ualmindelig nemt at gøre. Du har en url, der er lidt kortere for eksemplets skyld:

  url = ".....noget.asp?a=3&timestamp=7913"

og der hvor du udskriver den, bruger du HTMLencode funktionen i ASP

  response.write(Server.HTMLEncode(url))
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 14:35 #20
Ok, så er det måske det helt forkerte sted, som jeg leder efter mit problem ;-) Det er blot der, som de hos Kelkoo har foreslået mig at kigge ;-)

Hvis jeg på http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test21.asp tilføjer:

<%
    url = "" & Session("GetRequestUrl") & ""
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "GET", url, false
    xmlhttp.send ""
    Response.write xmlhttp.responseText
    set xmlhttp = nothing
%>

for for at få udskrevet indholdet af URL fra Kelkoo, skriver den blot "The signature or timestamp you provided is wrong". Hos Kelkoo har nogle "udviklere" nævnt, at det formentlig er fordi, at "&timestamp" ikke altid er korrekt i URL.

Jeg er virkelig total-forvirret - kan du se en anden måde, jeg kan løse problemet på, så jeg kan få udskrevet indholdet af URL?

Sig endelig til, hvis noget af ovenstående lige kræver en uddybning ;-) Det hele baserer sig på http://developer.kelkoo.com/samples/signing-url-asp/
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 14:37 #21
Vi overlappede vist lige - tester #19
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 14:46 #22
Har afprøvet lidt på http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test22.asp, hvor:

1. UrlPath = UrlPath & "&timestamp=" & TimeStamp

Dette er sådan, at kelkoo foreskriver

2. De sidste liniers kode er:

GetRequestUrl = UrlHost & UrlPath & "&hash=" & AuthenticationToken
Session("GetRequestUrl") = GetRequestUrl

END FUNCTION
%>

<%
GetRequestUrl"http://dk.shoppingapis.kelkoo.com", "/V3/productSearch?query=camping+italien&sort=default_ranking&start=1&results=20&show_products=1&show_subcategories=0&show_refinements=0" , "96943159", "vzJWa59E"
%>

<%
'Response.Write Session("GetRequestUrl")
response.write(Server.HTMLEncode(Session("GetRequestUrl")))
%>

<%
    url = "" & (Server.HTMLEncode(Session("GetRequestUrl"))) & ""
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "GET", url, false
    xmlhttp.send ""
    Response.write xmlhttp.responseText
    set xmlhttp = nothing
%>

men intet hjælper.

Det vil være kanon, hvis du kan se noget, men også helt ok, hvis du vælger at stoppe "fejlsøgningen" ;-)
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 15:04 #23
Hvad skal vi ellers lave om lørdagen ...

I sådan noget API-noget er der ikke tale om HTML, og derfor skal det ***ikke*** HTMLencodes.

Er det fordi du tester om det ser ok ud, ved lige at skrive det ud? (Jeg skulle måske have læst det hele igennem...) Det skal kun htmlencodes ved udskrivning til HTML (som navnet antyder)

Så mit gæt er: alt er fint og korrekt, og i hvert fald klar til at blive afprøvet. (når du fjerner Server.HTMLEncode)
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 16:20 #24
Skulle lige have lidt frisk luft fra alle de koder ;-)

Har nu lavet http://www.rejser-rundt.dk/rejsetilbud/kelkoo/test23.asp som er fuldstændig opbygget som vist på http://developer.kelkoo.com/samples/signing-url-asp/

Ser umiddelbart ok ud, og herefter vil jeg gerne udskrive for netop at teste, om det er ok, men også for at se struktur osv.

Mit bedste bud på at kunne se indholdet af url, er med:

<%
    url = "" & ????????? & ""
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "GET", url, false
    xmlhttp.send ""
    Response.write xmlhttp.responseText
    set xmlhttp = nothing
%>

men hvad skal url være?

Har tidligere lavet:

Session("GetRequestUrl") = GetRequestUrl

hvorefter forsøgt med:

<%
    url = "" & ??Session("GetRequestUrl") & ""
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "GET", url, false
    xmlhttp.send ""
    Response.write xmlhttp.responseText
    set xmlhttp = nothing
%>

som blot ender med "The signature or timestamp you provided is wrong".

Alt i alt mangler jeg bare at komme skridtet videre fra http://developer.kelkoo.com/samples/signing-url-asp/. Kan du se hvordan?

Virkelig glad for, at du vil bruge noget af din lørdag på at hjælpe !
Avatar billede erikjacobsen Ekspert
16. februar 2013 - 20:02 #25
Så er vi ude i noget, jeg ikke ved noget om. Det er jo nok enten dit timestamp, eller den der hash/signatur værdi, der er noget galt med. Med hvad kelkoo vil have, det ved jeg ikke.
Avatar billede carstenandersen Nybegynder
16. februar 2013 - 20:46 #26
Helt ok - tusind tak for ind indsats :-)
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