URL-kodning
Koda text som ska in i en webbadress, eller gör om en kodad adress till läsbar text.
0 tecken · 0 byte
Resultat
Som enskild del kodas även snedstreck och frågetecken. Utan kryss bevaras adressens struktur och bara otillåtna tecken kodas.
Så fungerar det
Webbadresser får bara innehålla ett begränsat antal tecken. Allt annat skrivs som ett procenttecken följt av teckenets värde i hexadecimal form, vilket är därför ett mellanslag blir %20.
Skillnaden mellan de två lägena är vad som räknas som struktur. När du kodar en enskild del kodas även snedstreck, frågetecken och likhetstecken, eftersom de annars skulle tolkas som delar av adressen.
När du kodar en hel adress lämnas de tecknen orörda, så att adressens uppbyggnad bevaras. Det läget använder du på en färdig adress som bara innehåller enstaka tecken som behöver kodas.
Väljer du fel läge på en parameter kan mottagaren tolka värdet som flera parametrar. Ska ett värde in efter ett likhetstecken ska det nästan alltid kodas som en enskild del.
Plustecken är en fallgrop: i frågedelen av en adress betyder plus historiskt ett mellanslag, men i sökvägen betyder det ett riktigt plustecken.
Funktionerna bakom lägena
Läget för en enskild del använder JavaScripts encodeURIComponent och decodeURIComponent, och läget för en hel adress encodeURI och decodeURI, alla fyra definierade i ECMAScript-standarden. Varje tecken som ska kodas görs först om till UTF-8, och varje byte skrivs som ett procenttecken och två hexadecimala siffror. Som enskild del blir smörgås & te därför sm%C3%B6rg%C3%A5s%20%26%20te. Som hel adress står et-tecknet kvar: sm%C3%B6rg%C3%A5s%20&%20te. Ett tecken som inte går att skriva i UTF-8, t.ex. en ensam halva av ett surrogatpar från en trasig kopiering, ger felmeddelande i stället för ett resultat.
Tecken som aldrig kodas
ECMAScript lämnar bokstäverna A–Z och a–z, siffrorna, understreck, bindestreck, punkt, utropstecken, tilde, asterisk, apostrof och parenteser okodade i båda lägena. RFC 3986 räknar bara bindestreck, punkt, understreck och tilde som oreserverade; utropstecken, apostrof, parenteser och asterisk hör till de reserverade avgränsarna och kan betyda något i vissa adresser.
Läget för hel adress lämnar dessutom semikolon, snedstreck, frågetecken, kolon, snabel-a, et-tecken, likhetstecken, plus, dollar, komma och brädgård orörda. Hakparenteser kodas däremot, så en IPv6-adress i adressen, som http://[::1]:8080/, blir http://%5B::1%5D:8080/.
Plus och formulär
Formulär kodas enligt formatet application/x-www-form-urlencoded, där WHATWG:s URL-standard skriver mellanslag som plus och dessutom kodar utropstecken, apostrof, parenteser och tilde. Verktyget skriver alltid %20, och avkodningen gör inte om plus till mellanslag: a+b förblir a+b. Kommer texten från ett formulär behöver plustecknen bytas mot mellanslag först.
Avkodningsfel
Avkodningen kräver giltig UTF-8. %E4, som är ä i den äldre teckenkodningen Latin-1, ger felmeddelandet, medan %C3%A4 ger ä. Ett procenttecken som inte följs av två hexadecimala siffror, som i a%zz, är också ett fel. I läget för hel adress lämnas kodade avgränsare orörda: a%2Fb förblir a%2Fb, eftersom ett avkodat snedstreck skulle ändra adressens uppbyggnad.