Manuell URL-dekoding

Kanskje du har lagt merke til at særskilde bokstavar vert endra til %99 når dei er brukt i nettadresser. Til dømes om du søker på Google kan du etter søket titte på adressa og oppdage at mellomrom og norske bokstavar er gjort om til % med tal og bokstavkoder. Dette er kjent som urlencode-omsett tekst. Det går tilogmed ann å omsetje det til vanlege bokstavar manuelt - men det er nokså innvikla og langt lettare å bruke PHP eller JavaScript..

Det er lell ei morosam øving å omsetje slike koder til vanleg bokstavformat. Her har du litt teori om URL-enkoding på engelsk å starte med.

For spesielle norske bokstavar er det ganske enkelt. Dei to teikna etter %-teiknet er den heksadesimale koden for bokstaven. Bruk "charmap" i Windows til å finne den rette bokstaven ved å skrive inn "00" og dei to teikna i boksen Go to Unicode. Til dømes er "å" omsett til %E5 i ei adresse, og 00E5 i charmap syner deg bokstaven å.

Når vi har med CJK-teikn å gjera er det verre - men det er likevel mogleg. Her skal vi bruke teiknet 我, som HTML entity er det skrive "我" (i følge babelfish.altavista.com tyder det "eg" på kinesisk) - og i ei internettadresse vert det ikkje mindre enn tre %-kombinasjonar: %E6%88%91.

For å omsetje denne koden treng vi kalkulatoren i Windows eller eit liknande program, ein teksteditor og "charmap". For å opne kalkulatoren kan du velje Start -> Kjør og skrive calc, og bokstavkartet kan du opne på same vis ved å skrive charmap.

  1. Start Windows-kalkulatoren og bytt til "Scientific mode" i "View" menyen. Så må du stille inn kalkulatoren på "Hex" format og skrive den heksadesimale verdien av bokstaven (fjern % -teikna): e68891.
  2. Klikk "Bin" for å sjå dette nummeret i binært format.
  3. Kopier det binære nummeret og lim det inn i Notepad. Du ser 111001101000100010010001

    Dette er ein binær, UTF-8 enkoda streng. Vi treng å fjerne UTF-8 enkodinga for å finne Unicode nummeret. Her får vi hjelp av UTF-8 - dokumentasjonen for å finne ein måte å gjera om på.
  4. Start med slutten og legg inn lineskift for kvart 8. tal. Det skulle bli:

    11100110
    10001000
    10010001
  5. Frå fyrste line, fjern alle 1 - tala til venstre på lina. Fjern så dei fyrste to tal - "10" - frå kvar av dei neste linene. Det skulle sjå slik ut:
    00110
    001000
    010001
  6. Nå kan du fjerne lineskifta og setje saman heile raden att:
    00110001000010001
  7. Kopier talet og gå til kalkulatoren på nytt. Den burde fortsatt vera innstilt på binært format, så du kan lime inn det nye nummeret.
  8. Om du klikker "Dec" (for desimal eller "normalt" format), ser du talet vi må bruke i HTML entities - 25105.
  9. Om du klikker "Hex". ser du Unicode-nummeret i heksadesimalt format: "6211". Nå kan du opne Windows sitt "bokstavkart" (charmap). Du må fyrst velje ein font som støttar Unicode, og aktivere "Advanced view" om du ikkje ser boksen "Go to Unicode". Så, i "Go to Unicode" boksen skriv du 6211. Voila, der har vi bokstaven vi er ute etter..

Det er klart enklare å skrive <? urldecode('%E6%88%91') ?> :-)

Denne mini-oppskrifta var opprinneleg eit svar til eit spørsmål på experts-exchange.

Comments

Add commentAdd comment