URL-kodning
Kod tekst, der skal ind i en webadresse, eller gør en kodet adresse til læsbar tekst.
0 tegn · 0 byte
Resultat
Som enkeltdel kodes også skråstreg og spørgsmålstegn. Uden flueben bevares adressens struktur, og kun ulovlige tegn kodes.
Sådan virker det
Webadresser må kun indeholde et begrænset sæt tegn. Alt andet skrives som et procenttegn efterfulgt af tegnets værdi på hexadecimal form, og det er derfor, et mellemrum bliver til %20.
Forskellen mellem de to tilstande er, hvad der regnes som struktur. Når du koder en enkeltdel, kodes også skråstreg, spørgsmålstegn og lighedstegn, da de ellers ville blive læst som dele af adressen.
Når du koder en hel adresse, lader den de tegn stå, så adressens opbygning bevares. Den tilstand bruger du på en færdig adresse, der kun indeholder enkelttegn, som skal kodes.
Vælger du forkert tilstand på en parameter, kan modtageren læse værdien som flere parametre. Skal en værdi ind efter et lighedstegn, skal den næsten altid kodes som en enkeltdel.
Plustegnet er en fælde: i forespørgselsdelen af en adresse betyder plus historisk et mellemrum, mens det i stien betyder et ægte plustegn.
Funktionerne bag tilstandene
Tilstanden for en enkeltdel bruger JavaScripts encodeURIComponent og decodeURIComponent, og tilstanden for en hel adresse encodeURI og decodeURI, alle fire defineret i ECMAScript-standarden. Hvert tegn, der skal kodes, laves først om til UTF-8, og hver byte skrives som et procenttegn og to hexadecimale cifre. Som enkeltdel bliver smørrebrød & te derfor til sm%C3%B8rrebr%C3%B8d%20%26%20te. Som hel adresse står og-tegnet urørt: sm%C3%B8rrebr%C3%B8d%20&%20te. Et tegn, der ikke kan skrives i UTF-8, for eksempel en enlig halvdel af et surrogatpar fra en ødelagt kopiering, giver en fejlmeddelelse i stedet for et resultat.
Tegn, der aldrig kodes
ECMAScript lader bogstaverne A–Z og a–z, cifrene, understreg, bindestreg, punktum, udråbstegn, tilde, stjerne, apostrof og parenteser stå ukodede i begge tilstande. RFC 3986 regner kun bindestreg, punktum, understreg og tilde som ureserverede; udråbstegn, apostrof, parenteser og stjerne hører til de reserverede skilletegn og kan betyde noget i visse adresser.
Tilstanden for en hel adresse lader desuden semikolon, skråstreg, spørgsmålstegn, kolon, snabel-a, og-tegn, lighedstegn, plus, dollar, komma og havelåge stå urørt. Kantede parenteser kodes derimod, så en IPv6-adresse i adressen, som http://[::1]:8080/, bliver til http://%5B::1%5D:8080/.
Plus og formularer
Formularer kodes efter formatet application/x-www-form-urlencoded, hvor WHATWG’s URL-standard skriver mellemrum som plus og desuden koder udråbstegn, apostrof, parenteser og tilde. Værktøjet skriver altid %20, og afkodningen laver ikke plus om til mellemrum: a+b forbliver a+b. Kommer teksten fra en formular, skal plustegnene først byttes ud med mellemrum.
Fejl ved afkodning
Afkodningen kræver gyldig UTF-8. %F8, som er ø i den ældre tegnkodning Latin-1, giver fejlmeddelelsen, mens %C3%B8 giver ø. Et procenttegn, der ikke efterfølges af to hexadecimale cifre, som i a%2, er også en fejl. I tilstanden for en hel adresse lades kodede skilletegn urørt: a%2Fb forbliver a%2Fb, fordi en afkodet skråstreg ville ændre adressens opbygning.