Avatar billede bluwduch Nybegynder
19. januar 2004 - 11:25 Der er 15 kommentarer og
1 løsning

Forstå Google's encoding af URL

Hejsa

Hvis man går ind på Google og søger på f.eks. "rødgrød -æøå", så encoder den din søgning som q i adressebaren. Hvis den streng der er i adressen hentes på en ASP side med HTTP_REFERER, så er den selvfølgelig også encoded, men hvis man decoder den med f.eks. JavaScripts unescape(), så bliver den decoded forkert, dvs. at rødgrød -æøå = rødgrød+-æøå

Google sender nogle informationer med om den encoding den bruger (tror jeg), og hvis man ændrer den der hedder ie=UTF-8 til UTF-6 i selve Google adressestrengen, så ser det faktisk ud som ovenfor nævnt. Håber det giver lidt mening - Pointen er, hvordan decoder man den encding Google laver, så det bliver rigtigt i sidste ende?
Avatar billede erikjacobsen Ekspert
19. januar 2004 - 12:11 #1
Jeg ved kun hvad man gør i PHP:

<?
  $q="dyrepension+%C3%A5rhus";
  print utf8_decode(urldecode($q));
?>
Avatar billede bluwduch Nybegynder
19. januar 2004 - 12:28 #2
Okay! - Men der findes ikke (så vidt jeg ved) en funktion i VBScript til at gøre det samme.
Avatar billede bluwduch Nybegynder
19. januar 2004 - 12:36 #3
Kan det gøres automatisk/generisk, eller skal man igang med en større omgang replace?
Avatar billede erikjacobsen Ekspert
19. januar 2004 - 12:50 #4
utf-8 er en smule kompliceret - et tegn kan fylde fra 1-4 bytes, hvis jeg husker rigtigt.
Men led efter om ikke en eller anden har skrevet sådan en funktion du kan bruge.
Avatar billede bluwduch Nybegynder
19. januar 2004 - 12:56 #5
Jeg har efterhånden gloet ret intensivt, og ikke kunne finde en funktion der kunne genskabe det rigtigt. Ved ikke hvad Google laver, men den encoder de specielle karakterer således:

æ -> %C3%A6 -> Ã|

Jeg kan ikke lige gennemskue hvordan det hænger sammen, og vil jo helst ikke lave alle muligheder af specielle tegn med korrekte replaces. Men specielle tegn bliver ihvertfald til 2 karakterer i encodingen.
Avatar billede erikjacobsen Ekspert
19. januar 2004 - 12:58 #6
Selve princippet står forklaret her, men hvordan man lige gøre fra UTF-8 til ISO-8859-1 ved jeg ikke.
http://dk.php.net/manual/en/function.utf8-encode.php

Men der må og skal være nogen der har gjort det i VB, og lagt resultatet på nettet.
Avatar billede bluwduch Nybegynder
19. januar 2004 - 13:15 #7
Synes bare ikke jeg har kunne finde en funktion der virker med Google's encoding - Men har også ligget i 2 lejre, da jeg endnu ikke ved om det kan laves med opsætning, eller om man er nødt til at kode sig ud af det.
Avatar billede bluwduch Nybegynder
19. januar 2004 - 13:17 #8
For skal man kode sig ud af det, så er det jo ikke bare æøå, men alle andre tegn der er specielle i forhold til de almindelige karakterer, og så er det pludselig noget rodearbejde...

Det jeg prøver er at hive søgestrengen ud af strengen i adressefeltet, og der skal man jo tage højde for mange underlige tegn.
Avatar billede erikjacobsen Ekspert
19. januar 2004 - 13:22 #9
Det er ikke "googles encoding" - det er rent standard utf-8 ;)
Avatar billede bluwduch Nybegynder
19. januar 2004 - 13:26 #10
Alrighty! - Men prøv at kigge på adressestrengen når du søger æøå på Google, og på f.eks. Hotbot.com - Der er forskel på den måde disse tegn encodes - Hotbots måde er lige til at decode med script funktioner, men den måde Google laver det på kan ikke umiddelbart oversættes - Og så kan den være man skal i gang med at replace.
Så hvis Google bruger noget generisk til det, så må der også være en generisk decoder - Men jeg ved ikke hvad de bruger, men de er tilsyneladende ikke de eneste der gør det på den måde...
Avatar billede erikjacobsen Ekspert
19. januar 2004 - 14:13 #11
Google bruger utf8 - ikke andet. Det er en standard. Hvad har du søgt efter?
Avatar billede bluwduch Nybegynder
19. januar 2004 - 14:20 #12
Næsten alt indenfor emnet - Vil bare genskabe det Google laver søgeordene om til i adressebaren
Avatar billede csslover Nybegynder
19. januar 2004 - 14:23 #13
her en func der urdecoder i vbscript

Function URLDecode(encodedstring)
    Dim strIn, strOut, intPos, strLeft
    Dim strRight, intLoop
    strIn  = encodedstring : strOut = _
        "" : intPos = Instr(strIn, "+")
    Do While intPos
        strLeft = "" : strRight = ""
        If intPos > 1 then _
            strLeft = Left(strIn, intPos - 1)
        If intPos < len(strIn) then _
            strRight = Mid(strIn, intPos + 1)
        strIn = strLeft & " " & strRight
        intPos = InStr(strIn, "+")
        intLoop = intLoop + 1
    Loop
    intPos = InStr(strIn, "%")
    Do while intPos
        If intPos > 1 then _
            strOut = strOut & _
                Left(strIn, intPos - 1)
        strOut = strOut & _
            Chr(CInt("&H" & _
                mid(strIn, intPos + 1, 2)))
        If intPos > (len(strIn) - 3) then
            strIn = ""
        Else
            strIn = Mid(strIn, intPos + 3)
        End If
        intPos = InStr(strIn, "%")
    Loop
    URLDecode = strOut & strIn
End Function
Avatar billede bluwduch Nybegynder
19. januar 2004 - 14:47 #14
Ja, den virker sgu' :-D

Havde faldet over en del andre, hvor de ikke virkede med den encoding som Google laver, men det gør denne her tilsyneladende.

Takker!
Avatar billede bluwduch Nybegynder
19. januar 2004 - 14:49 #15
Lagde dog ellers mærke til, at det nok var mere browseren der bøvlede, idet at hvis man brugte en Request.QueryString, så kunne den godt decode det uden man egentlig skulle foretage sig andet.
Avatar billede bluwduch Nybegynder
19. januar 2004 - 14:50 #16
Måske ikke relevant for denne tråd, men findes der en lignende funtion der kan gøre det i javascript?
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