UltKit

URL encoderen en decoderen

Maak tekst geschikt om in een URL te plaatsen, of zet reeksen als %20 terug om in leesbare tekens. De tool gebruikt de ingebouwde encodeURIComponent, encodeURI en decodeURIComponent van uw browser, toont queryparameters in een tabel en verstuurt niets naar een server.

Modus

0 tekens · 0 woorden · 0 regels

0 tekens · 0 woorden · 0 regels

Werkt volledig in dit browsertabblad. Uw tekst wordt nooit geüpload of opgeslagen.

Wat elke functie escapet

Berekend met de browserfuncties zelf. encodeURIComponent laat letters, cijfers en deze tekens ongemoeid: ! ' ( ) * - . _ ~

TekenencodeURIComponentencodeURI
(spatie)%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

Percent-encoding en de gereserveerde tekens van RFC 3986

Een URL mag maar een beperkte set ASCII-tekens bevatten. RFC 3986, de specificatie uit 2005 voor de URI-syntaxis, verdeelt die in twee groepen. De unreserved tekens, A–Z, a–z, 0–9 en de vier tekens - . _ ~, hoeven nooit te worden gecodeerd. De reserved tekens hebben een functie: de algemene scheidingstekens : / ? # [ ] @ scheiden schema, host, pad, query en fragment, en de subscheidingstekens ! $ & ' ( ) * + , ; = scheiden onderdelen daarbinnen, zoals & en = dat doen in een querystring. Alle andere tekens, en elk gereserveerd teken dat als gewone data wordt gebruikt, moeten met procentcodering worden gecodeerd.

Procentcodering schrijft een byte op als % gevolgd door twee hexadecimale cijfers. Tekst wordt eerst omgezet naar UTF-8, dus een spatie wordt %20, een é (twee bytes) wordt %C3%A9 en een emoji wordt vier %XX-groepen. Daarom komt een zoekopdracht naar "café & bar" in een link terecht als caf%C3%A9%20%26%20bar: de & wordt gecodeerd zodat de server hem niet leest als begin van een nieuwe parameter.

encodeURIComponent, encodeURI en decoderen

encodeURIComponent is de juiste keuze voor één onderdeel, zoals een queryWaarde, een padsegment of een doorverwijs-URL die als parameter wordt meegegeven. Het codeert alles behalve de unreserved tekens en ! ' ( ) *, die JavaScript om historische redenen met rust laat. encodeURI (hele URL) gaat ervan uit dat de invoer al een compleet adres is en laat de gereserveerde tekens intact, zodat bij https://example.com/a b?q=1 alleen de spatie wordt gecodeerd. encodeURI gebruiken op een parameterwaarde is een klassieke fout: een & of # in de waarde blijft dan staan en breekt de URL.

Decode maakt beide functies ongedaan. HTML-formulieren die met GET worden verstuurd, gebruiken het oudere formaat application/x-www-form-urlencoded, waarin een spatie als + wordt geschreven in plaats van %20; laat Treat + as a space aangevinkt voor die gevallen en vink het uit wanneer een letterlijk plusteken ertoe doet, zoals in een telefoonnummer. Als de invoer een % bevat die niet door twee hexadecimale cijfers wordt gevolgd, of bytes die geen geldige UTF-8 zijn, mislukt het decoderen met een duidelijke melding in plaats van te gokken. Als de tekst een querystring bevat, verschijnen de parameters gedecodeerd in een tabel onder de tool. Voor binaire data in URL's is Base64url het gebruikelijke alternatief.

Veelgestelde vragen

Moet een spatie in een URL %20 of een plusteken zijn?
In paden en volgens RFC 3986 is een spatie %20. De +-vorm betekent alleen een spatie binnen querystrings die zijn gecodeerd zoals HTML-formulieren dat doen, dus %20 is overal de veilige keuze.
Waarom staat er %2520 in mijn URL?
Het is twee keer gecodeerd. De eerste keer werd een spatie %20 en de tweede keer werd het %-teken zelf gecodeerd als %25. Decodeer één keer om de extra laag ongedaan te maken en codeer waarden in je code maar op één plek.
Welke tekens hoeven nooit percent-encoding?
De unreserved set van RFC 3986: de letters A tot Z in hoofdletters en kleine letters, de cijfers 0 tot 9, en het koppelteken, de punt, het underscore-teken en de tilde.
Mag een URL letters met accenten of niet-Latijnse tekens bevatten zonder encoding?
Browsers tonen ze, maar over de lijn wordt elk niet-ASCII-teken in een pad of query verstuurd als procentgecodeerde UTF-8. Domeinnamen gebruiken een apart systeem, Punycode, dat ze omzet naar xn--labels.
Waarom meldt het decoderen een ongeldige reeks?
De tekst bevat een % die niet door twee hexadecimale cijfers wordt gevolgd, zoals een letterlijke "100%", of de bytes decoderen naar ongeldige UTF-8. Codeer losse %-tekens als %25 vóór het decoderen.