UltKit

URL-koda och avkoda

Gör text säker att använda i en URL, eller omvandla sekvenser som %20 tillbaka till läsbara tecken. Verktyget använder webbläsarens egna encodeURIComponent, encodeURI och decodeURIComponent, visar frågeparametrar i en tabell och skickar ingenting till någon server.

Läge

0 tecken · 0 ord · 0 rader

0 tecken · 0 ord · 0 rader

Körs helt i den här webbläsarfliken. Din text laddas aldrig upp eller sparas.

Vad varje funktion escapar

Beräknat med webbläsarens egna funktioner. encodeURIComponent lämnar bokstäver, siffror och dessa tecken orörda: ! ' ( ) * - . _ ~

TeckenencodeURIComponentencodeURI
(mellanslag)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Procentkodning och de reserverade tecknen i RFC 3986

En URL får bara innehålla en begränsad uppsättning ASCII-tecken. RFC 3986, specifikationen för URI-syntax från 2005, delar in dem i två grupper. De oreserverade tecknen, A–Z, a–z, 0–9 och de fyra tecknen - . _ ~, behöver aldrig kodas. De reserverade tecknen har en uppgift: de allmänna avgränsarna : / ? # [ ] @ skiljer schema, värd, sökväg, frågesträng och fragment åt, och underavgränsarna ! $ & ' ( ) * + , ; = skiljer objekt inom dem åt, som & och = gör i en frågesträng. Allt annat, och varje reserverat tecken som används som vanlig data, måste procentkodas.

Procentkodning skriver en byte som % följt av två hexadecimala siffror. Texten omvandlas först till UTF-8, så ett blanksteg blir %20, ett é (två byte) blir %C3%A9 och en emoji blir fyra %XX-grupper. Därför hamnar en sökning på "café & bar" i en länk som caf%C3%A9%20%26%20bar: tecknet & kodas så att servern inte tolkar det som starten på en ny parameter.

encodeURIComponent, encodeURI och avkodning

encodeURIComponent är rätt val för en enskild del, till exempel ett värde i en frågesträng, ett sökvägssegment eller en omdirigerings-URL som skickas som parameter. Funktionen kodar allt utom de oreserverade tecknen och ! ' ( ) *, som JavaScript av historiska skäl lämnar orörda. encodeURI (hela URL:en) utgår från att indata redan är en komplett adress och behåller de reserverade tecknen, så i https://example.com/a b?q=1 kodas bara blanksteget. Att använda encodeURI på ett parametervärde är ett klassiskt fel: ett & eller # i värdet skulle finnas kvar och förstöra URL:en.

Avkoda gör det omvända för båda funktionerna. HTML-formulär som skickas med GET använder det äldre formatet application/x-www-form-urlencoded, där ett blanksteg skrivs som + i stället för %20. Låt Behandla + som blanksteg vara ikryssat för sådana, och avmarkera det när ett riktigt plustecken spelar roll, som i ett telefonnummer. Om indata innehåller ett % som inte följs av två hexadecimala siffror, eller byte som inte är giltig UTF-8, misslyckas avkodningen med ett tydligt meddelande i stället för att gissa. När texten innehåller en frågesträng visas dess parametrar avkodade i en tabell under verktyget. För binärdata i URL:er är Base64url det vanliga alternativet.

Vanliga frågor

Ska ett mellanslag i en URL vara %20 eller ett plustecken?
I sökvägar och enligt RFC 3986 är ett blanksteg %20. Formen + betyder bara blanksteg i frågesträngar som kodats som HTML-formulär gör, så %20 är det säkra valet överallt.
Varför innehåller min URL plötsligt %2520?
Den har kodats två gånger. Första omgången gjorde ett blanksteg till %20, och den andra kodade själva %-tecknet som %25. Avkoda en gång för att ta bort det extra lagret, och koda värden på bara ett ställe i koden.
Vilka tecken behöver aldrig procentkodas?
De oreserverade tecknen i RFC 3986: bokstäverna A till Z som versaler och gemener, siffrorna 0 till 9 samt bindestreck, punkt, understreck och tilde.
Kan en URL innehålla bokstäver som å, ä och ö utan kodning?
Webbläsare visar dem, men i själva överföringen skickas varje icke-ASCII-tecken i en sökväg eller frågesträng som procentkodad UTF-8. Domännamn använder ett separat system, Punycode, som gör om dem till xn---etiketter.
Varför rapporterar avkodningen en felaktig sekvens?
Texten innehåller ett % som inte följs av två hexadecimala siffror, till exempel ett bokstavligt "100%", eller så avkodas byten till ogiltig UTF-8. Koda lösa %-tecken som %25 före avkodning.