URL-codeer of -decodeer elke tekst

Codeer een queryspecificatie, een padsegment of een hele URL met percent-encoding, of zet %XX-reeksen terug in leesbare tekst. Werkt met UTF-8, +-spaties in formulierstijl en één waarde per regel. Niets verlaat je browser.

Zo codeer of decodeer je tekst in een URL

  1. Plak de tekst, waarde of URL in het invoervak.
  2. Kies het soort codering. Houd voor één queryspecificatie of padsegment Component aan. Kies voor een heel adres waarvan alleen de spaties en niet-ASCII-letters moeten worden hersteld Volledige URL. Kies voor gegevens die als verzending van een HTML-formulier worden gelezen Formulier.
  3. Druk op Coderen of Decoderen. Met Eén waarde per regel aangevinkt wordt elke regel apart verwerkt, zodat je een hele lijst parameters of URL’s in één keer omzet.
  4. Kopieer het resultaat, of druk op Resultaat als invoer gebruiken om het opnieuw te laten lopen, bijvoorbeeld om een waarde uit te pakken die twee keer is gecodeerd.

Decodeer je een complete URL met een querystring, dan toont de tool ook elke parameternaam en -waarde in gewone tekst, de snelste manier om een lange tracking- of redirect-URL te lezen.

Wat percent-encoding is

Een URL mag maar een beperkte set ASCII-tekens bevatten, en een aantal daarvan heeft een taak: ? start de query, & scheidt parameters, # start het fragment, / scheidt padsegmenten. Percent-encoding is hoe al het andere erin komt. Elk teken wordt omgezet naar zijn UTF-8-bytes en elke byte wordt geschreven als % plus twee hexadecimale cijfers. Een spatie is één byte en wordt dus %20; é is twee bytes, %C3%A9; een emoji zoals 😀 is er vier, %F0%9F%98%80. Decoderen draait het proces om.

De regels komen uit RFC 3986, sectie 2 (Engels), de standaard die de syntaxis van URI’s vastlegt. Die beveelt hoofdletters voor de hexadecimale cijfers aan (%3A, niet %3a), zegt dat tekst eerst als UTF-8-bytes moet worden gecodeerd en waarschuwt dat implementaties dezelfde tekenreeks niet meer dan één keer mogen coderen of decoderen.

Gereserveerde en niet-gereserveerde tekens (RFC 3986)

RFC 3986 verdeelt de tekens die een URL mag bevatten in twee groepen:

  • Niet-gereserveerd: letters A–Z a–z, cijfers 0–9 en - . _ ~. Die hoeven nooit te worden gecodeerd en betekenen gecodeerd of niet hetzelfde.
  • Gereserveerd: de algemene scheidingstekens : / ? # [ ] @ en de subscheidingstekens ! $ & ' ( ) * + , ; =. Die kunnen structuur dragen, dus zodra er een deel is van je gegevens en niet van de syntaxis van de URL, moet het met percent-encoding worden gecodeerd.

Al het andere, waaronder spaties, % zelf, aanhalingstekens, punthaken en elk niet-ASCII-teken, mag niet zomaar in een URL staan en moet altijd worden gecodeerd. De meest voorkomende:

TekenGecodeerdWaarom het ertoe doet
spatie%20 (of + in formuliergegevens)Mag helemaal niet in URL’s
&%26Zou een nieuwe queryparameter starten
=%3DZou een parameternaam van zijn waarde scheiden
?%3FZou de querystring starten
#%23Zou alles erna in het fragment afknippen, dat nooit naar de server wordt gestuurd
/%2FZou een extra padsegment maken
+%2BWordt in querystrings met formuliercodering als spatie gelezen
%%25Zou als begin van een escape worden gelezen
: @%3A %40Scheiden schema, inloggegevens en host
é%C3%A9Niet-ASCII, gecodeerd als zijn twee UTF-8-bytes

Component, volledige URL, RFC 3986 of formulier: welke gebruik je

Dezelfde invoer wordt anders gecodeerd, afhankelijk van waar het resultaat heen gaat. Voor de invoer Tom & Jerry's (2024)/ü:

  • Component geeft Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. Dat is encodeURIComponent van JavaScript, dat alles codeert behalve letters, cijfers en - _ . ! ~ * ' ( ). Gebruik het voor één queryspecificatie, één padsegment of een URL die je in de parameter van een andere URL stopt, zoals een redirectdoel.
  • Strikt RFC 3986 geeft Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Het codeert bovendien ! ' ( ) *, die RFC 3986 als subscheidingstekens reserveert, hoewel encodeURIComponent ze met rust laat. Gebruik het als een strikte parser of een schema voor het ondertekenen van verzoeken precies de set van de RFC verwacht.
  • Formulier geeft Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Het volgt het formaat application/x-www-form-urlencoded uit de WHATWG URL-standaard (Engels): alleen letters, cijfers en * - . _ blijven zoals ze zijn, en een spatie wordt +. Dat is wat een HTML-formulier en URLSearchParams versturen.
  • Volledige URL geeft Tom%20&%20Jerry's%20(2024)/%C3%BC. Dat is encodeURI, dat ; / ? : @ & = + $ , # met rust laat omdat het ervan uitgaat dat ze in een complete URL al hun taak doen. Gebruik het alleen om een heel adres met spaties of niet-ASCII-tekst op te schonen. Gebruik het nooit voor een waarde: een & in een waarde zou ongemerkt een nieuwe parameter starten.

%20 of +: spaties in URL’s

Er bestaan twee conventies naast elkaar. In de URL-syntaxis van RFC 3986 is een spatie altijd %20 en is een + gewoon een plusteken. In het formulierformaat dat browsers gebruiken als ze een formulier met GET verzenden, wordt een spatie als + geschreven, en de WHATWG-parser voor dat formaat vervangt elke + door een spatie vóór het percent-decoderen. Dus ?q=a+b betekent «a b» voor een parser van formuliergegevens, terwijl /a+b in een pad «a+b» betekent.

Daarom heeft de decoder de optie Behandel + als spatie. Vink die aan voor querystrings die door formulieren, zoekvakken en de meeste analysetools zijn gemaakt. Laat hem uit voor paden en voor waarden waarin een plus echt een plus is, zoals een e-mailadres als naam+tag@voorbeeld.nl, dat wordt gecodeerd als naam%2Btag%40voorbeeld.nl.

Hetzelfde in code

  • JavaScript: encodeURIComponent() en decodeURIComponent() voor waarden, encodeURI() voor hele URL’s en URLSearchParams voor querystrings in formulierstijl met +-spaties (zie MDN, Engels).
  • Python: urllib.parse.quote() laat / standaard ongecodeerd en schrijft spaties als %20, voor paden; quote_plus() codeert / en schrijft spaties als +, voor formulierwaarden (zie de Python-documentatie, Engels).
  • PHP: rawurlencode() volgt RFC 3986 en schrijft spaties als %20; urlencode() schrijft spaties als + (zie de PHP-handleiding, Engels).

Veelvoorkomende problemen met URL-codering

Dubbele codering: %2520 in plaats van %20

Bevat een URL %2520, %253A of iets dergelijks, dan heeft iets een al gecodeerde tekenreeks nog eens gecodeerd; %25 is het gecodeerde procentteken. Decodeer één keer en controleer het resultaat. De tool waarschuwt je als een gedecodeerd resultaat nog procentreeksen bevat, en met Resultaat als invoer gebruiken decodeer je de volgende laag. De oplossing in code is elke waarde precies één keer coderen, op het moment dat je de URL bouwt.

Foutmeldingen «Malformed URI sequence»

Strikte decoders weigeren een % die niet door twee hexadecimale cijfers wordt gevolgd, en bytereeksen die geen geldige UTF-8 zijn. Deze decoder is juist soepel: hij decodeert elke geldige reeks, laat een los % staan, vervangt ongeldige bytes door het vervangteken � en meldt dat, zodat je de kapotte plek kunt vinden in plaats van niets te krijgen.

Een waarde die bij # of & wordt afgekapt

Komt een parameter afgekapt aan, dan bevatte de waarde een ongecodeerde # of &, meestal omdat de URL met stringconcatenatie of met de codering Volledige URL is samengesteld. Codeer de waarde in de modus Component.

Een hele URL coderen maakt hem stuk

Laat je een complete URL door de modus Component lopen, dan wordt https:// https%3A%2F%2F. Dat klopt alleen als de URL zelf een parameterwaarde in een andere URL is. Codeer anders alleen het deel dat je invoegt, of gebruik de modus Volledige URL.

Verwante URL-tools

Bouw complete campagnelinks met de UTM-builder, haal trackingparameters weg met de URL-opschoner, of bekijk elke hop van een link met de redirect checker. Om een script als browserbladwijzer met één klik te verpakken, codeert de bookmarklet-maker het voor je met percent-encoding. En bewaar je naslagpagina’s zoals de RFC terwijl je werkt, dan houdt Marqly ze in één doorzoekbare bibliotheek, zie Marqly voor ontwikkelaars.

Veelgestelde vragen

Wat doet URL-encoding?

Het vervangt tekens die onveilig zijn of een betekenis hebben binnen een URL door een procentteken en twee hexadecimale cijfers per UTF-8-byte. Een spatie wordt %20, & wordt %26 en é wordt %C3%A9. Zo kan elke tekst in een URL reizen zonder voor de eigen structuur van de URL te worden aangezien.

Wat is het verschil tussen encodeURI en encodeURIComponent?

encodeURIComponent codeert alles behalve letters, cijfers en - _ . ! ~ * ' ( ), en is dus de juiste keuze voor één queryspecificatie of padsegment. encodeURI laat ook ; / ? : @ & = + $ , # ongemoeid, omdat het ervan uitgaat dat je een complete, al gestructureerde URL doorgeeft. Gebruik de modus Component voor waarden en de modus Volledige URL alleen voor hele adressen.

Moet een spatie %20 of + zijn?

Beide kloppen, op verschillende plekken. %20 werkt overal in een URL. Het +-teken betekent alleen een spatie in querystrings met formuliercodering (application/x-www-form-urlencoded), zoals HTML-formulieren en URLSearchParams ze maken. In een pad is een + een gewoon plusteken. Decodeer je een querystring uit een formulier, vink dan Behandel + als spatie aan.

Waarom bevat mijn URL %2520?

Hij is twee keer gecodeerd. De eerste ronde maakte van een spatie %20, de tweede codeerde het % zelf als %25, wat %2520 geeft. RFC 3986 zegt dat dezelfde tekenreeks niet vaker dan één keer mag worden gecodeerd of gedecodeerd. Decodeer één keer om te zien of je %20 terugkrijgt, en decodeer dan opnieuw.

Kan ik veel URL’s tegelijk coderen of decoderen?

Ja. Plak één waarde per regel en laat Eén waarde per regel aangevinkt. Elke regel wordt apart gecodeerd of gedecodeerd, zodat regeleinden behouden blijven en niet %0A worden.

Welke tekens moeten worden gecodeerd?

Alles buiten de niet-gereserveerde set van RFC 3986 (letters, cijfers, koppelteken, punt, underscore, tilde) moet worden gecodeerd als het deel van een waarde is en niet van de structuur van de URL. Dat zijn spaties, niet-ASCII-letters, % en de gereserveerde scheidingstekens zoals ? # & = / : @ en +.

Wordt mijn tekst geüpload?

Nee. Coderen, decoderen en de uitsplitsing van de querystring draaien allemaal in je browser met ingebouwde JavaScript-functies. Er wordt niets naar een server gestuurd.

← Gratis tools

Home · Marqly