Naar de inhoud
Quaestio

URL-codering

Codeer tekst die in een webadres moet, of maak van een gecodeerd adres leesbare tekst.

0 Tekens · 0 Bytes

Resultaat

Schrijf iets in het veld hierboven.

Als los onderdeel worden ook de schuine streep en het vraagteken gecodeerd. Zonder vinkje blijft de opbouw van het adres bewaard en worden alleen niet-toegestane tekens gecodeerd.

Insluiten

Deze tool op je eigen site insluiten

Kopieer de code en plak die waar de tool moet verschijnen, bijvoorbeeld in een blogbericht of op een schoolpagina. Het is gratis, het kader heeft geen advertenties en de tool rekent in de browser van de bezoeker.

Zo werkt het

Webadressen mogen maar een beperkte verzameling tekens bevatten. Al het andere wordt als een procentteken gevolgd door de hexadecimale waarde van het teken geschreven, en daarom wordt een spatie %20.

Het verschil tussen de twee standen is wat er als structuur telt. Codeer je een los onderdeel, dan worden ook de schuine streep, het vraagteken en het gelijkteken gecodeerd, omdat ze anders als delen van het adres zouden worden gelezen.

Codeer je een heel adres, dan blijven die tekens staan, zodat de opbouw van het adres bewaard blijft. Die stand neem je voor een afgerond adres dat alleen losse tekens bevat die gecodeerd moeten worden.

Kies je bij een parameter de verkeerde stand, dan kan de ontvanger de waarde als meerdere parameters lezen. Moet een waarde achter een gelijkteken, dan hoort die bijna altijd als los onderdeel gecodeerd te worden.

Het plusteken is een valkuil: in het vraagdeel van een adres betekent een plus van oudsher een spatie, in het pad juist een echt plusteken.

De functies achter de standen

De stand voor een los onderdeel gebruikt encodeURIComponent en decodeURIComponent van JavaScript, en de stand voor een heel adres encodeURI en decodeURI, alle vier vastgelegd in de ECMAScript-standaard. Elk teken dat gecodeerd moet worden, wordt eerst UTF-8, en elke byte wordt geschreven als een procentteken met twee hexadecimale cijfers. Als los onderdeel wordt café & thee €3 daarom caf%C3%A9%20%26%20thee%20%E2%82%AC3. Als heel adres blijft het ampersand staan: caf%C3%A9%20&%20thee%20%E2%82%AC3. Een teken dat niet in UTF-8 te schrijven is, zoals een losse helft van een surrogaatpaar na een mislukte kopie, geeft een foutmelding in plaats van een resultaat.

Tekens die nooit worden gecodeerd

ECMAScript laat in beide standen de letters A–Z en a–z, de cijfers, het liggend streepje, het koppelteken, de punt, het uitroepteken, de tilde, het sterretje, de apostrof en de ronde haakjes ongecodeerd. RFC 3986 rekent alleen het koppelteken, de punt, het liggend streepje en de tilde tot de niet-gereserveerde tekens; het uitroepteken, de apostrof, de haakjes en het sterretje horen bij de gereserveerde scheidingstekens en kunnen in sommige adressen iets betekenen.

De stand voor een heel adres laat bovendien de puntkomma, de schuine streep, het vraagteken, de dubbele punt, het apenstaartje, het ampersand, het gelijkteken, het plusteken, het dollarteken, de komma en het hekje staan. Vierkante haken worden wel gecodeerd, dus een IPv6-adres in een URL, zoals http://[::1]:8080/, wordt http://%5B::1%5D:8080/.

Plustekens en formulieren

Formulieren worden gecodeerd als application/x-www-form-urlencoded, waarbij de URL-standaard van WHATWG een spatie als plusteken schrijft en ook het uitroepteken, de apostrof, de haakjes en de tilde codeert. De tool schrijft altijd %20, en het decoderen maakt van een plusteken geen spatie: a+b blijft a+b. Komt de tekst uit een formulier, vervang de plustekens dan eerst door spaties.

Fouten bij het decoderen

Decoderen vereist geldige UTF-8. %E9, dat in de oudere codering Latin-1 een é is, geeft de foutmelding, terwijl %C3%A9 een é oplevert. Een procentteken dat niet door twee hexadecimale cijfers wordt gevolgd, zoals in 100%, is ook een fout. In de stand voor een heel adres blijven gecodeerde scheidingstekens staan: a%2Fb blijft a%2Fb, omdat een gedecodeerde schuine streep de opbouw van het adres zou veranderen.

Bronnen

Zo worden de tools gecontroleerd