URL Encode JavaScript β€” encodeURIComponent()

Β·Front-end & Node.js DeveloperΒ·Beoordeeld doorSophie LaurentΒ·Gepubliceerd

Gebruik de gratis URL Encode Online direct in je browser β€” geen installatie nodig.

URL Encode Online online uitproberen β†’

Wanneer je een zoek-URL bouwt, een omleidingspad doorgeeft als queryparameter of een OAuth-autorisatieverzoek samenstelt, zullen speciale tekens zoals &, = en spaties de URL stil beschadigen tenzij je ze eerst URL-codeert. JavaScript biedt drie ingebouwde benaderingen β€” encodeURIComponent(), encodeURI() en URLSearchParams β€” elk ontworpen voor een ander gebruiksscenario. De verkeerde keuze is de hoofdoorzaak van de meeste coderingsfouten die ik in code-reviews ben tegengekomen. Voor snelle eenmalige codering zonder code handelt de URL Encoder van ToolDeck het direct in de browser af. Deze handleiding behandelt alle drie benaderingen uitgebreid (JavaScript ES2015+ / Node.js 10+): wanneer je elke methode gebruikt, hoe ze verschillen voor spaties en gereserveerde tekens, praktische Fetch- en API-patronen, CLI-gebruik en de vier fouten die de meeste subtiele productieproblemen veroorzaken.

  • βœ“encodeURIComponent() is de juiste keuze voor het coderen van individuele parameterwaarden β€” het codeert elk teken behalve A–Z, a–z, 0–9 en - _ . ! ~ * ' ( )
  • βœ“encodeURI() codeert een volledige URL en bewaart daarbij structurele tekens (/ ? # & = :) β€” gebruik het nooit voor individuele waarden
  • βœ“URLSearchParams codeert sleutel-waardeparen automatisch in het application/x-www-form-urlencoded-formaat, waarbij spaties + worden in plaats van %20
  • βœ“Dubbele codering is de meest voorkomende productiefout: encodeURIComponent(encodeURIComponent(value)) verandert %20 in %2520
  • βœ“De qs-bibliotheek verwerkt geneste objecten en arrays in querystrings native β€” URLSearchParams uit de standaardbibliotheek doet dit niet

Wat is URL-codering?

URL-codering (formeel percent-codering genoemd, gedefinieerd in RFC 3986) converteert tekens die niet toegestaan zijn of een speciale betekenis hebben in een URL naar een veilige representatie. Elk onveilig byte wordt vervangen door een procentteken gevolgd door twee hexadecimale cijfers β€” de ASCII-code van het teken. Een spatie wordt %20, een ampersand wordt %26, een schuine streep wordt %2F.

De tekens die altijd veilig zijn en nooit gecodeerd worden, heten niet-gereserveerde tekens: letters A–Z en a–z, cijfers 0–9 en de vier symbolen - _ . ~. Al het andere moet gecodeerd worden wanneer het als data wordt gebruikt, of heeft een structurele rol in de URL zelf (zoals / voor het scheiden van padsegmenten of &voor het scheiden van queryparameters). De praktische gevolg: een productnaam als β€œWireless Keyboard & Mouse” in een queryparameter vernietigt de URL-structuur als het rauw wordt doorgegeven.

Before Β· text
After Β· text
https://shop.example.com/search?q=Wireless Keyboard & Mouse&category=peripherals
https://shop.example.com/search?q=Wireless%20Keyboard%20%26%20Mouse&category=peripherals

encodeURIComponent() β€” De juiste functie voor queryparameters

encodeURIComponent() is het werkpaard van URL-codering in JavaScript. Het codeert elk teken behalve de niet-gereserveerde set (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )). Cruciaal is dat het alle tekens codeert die een structurele betekenis hebben in URL's β€” &, =, ?, #, / β€” wat het veilig maakt voor gebruik in parameter-waarden. Er is geen import nodig; het is een globale functie beschikbaar in alle JavaScript-omgevingen.

Minimaal werkend voorbeeld

JavaScript (browser / Node.js)
// Encode a search query parameter that contains special characters
const searchQuery  = 'Wireless Keyboard & Mouse'
const filterStatus = 'in-stock'
const maxPrice     = '149.99'

const searchUrl = `https://shop.example.com/products?` +
  `q=${encodeURIComponent(searchQuery)}` +
  `&status=${encodeURIComponent(filterStatus)}` +
  `&maxPrice=${encodeURIComponent(maxPrice)}`

console.log(searchUrl)
// https://shop.example.com/products?q=Wireless%20Keyboard%20%26%20Mouse&status=in-stock&maxPrice=149.99

Een omleidings-URL coderen als queryparameter

JavaScript
// The redirect destination is itself a URL β€” it must be fully encoded
// or the outer URL parser will misinterpret its ? and & as its own
const redirectAfterLogin = 'https://dashboard.internal/reports?view=weekly&team=platform'

const loginUrl = `https://auth.company.com/login?next=${encodeURIComponent(redirectAfterLogin)}`

console.log(loginUrl)
// https://auth.company.com/login?next=https%3A%2F%2Fdashboard.internal%2Freports%3Fview%3Dweekly%26team%3Dplatform

// Decoding on the receiving end
const params    = new URLSearchParams(window.location.search)
const next      = params.get('next')              // Automatically decoded
const nextUrl   = new URL(next!)                  // Safe to parse
console.log(nextUrl.hostname)                     // dashboard.internal

Niet-ASCII- en Unicode-tekens coderen

JavaScript
// encodeURIComponent handles Unicode natively in all modern environments
// Each UTF-8 byte of the character is percent-encoded
const customerName = 'de Vries, Lars'
const productTitle = '東京 wireless adapter'
const reviewText   = 'Heel goed β€” werkt perfect'

console.log(encodeURIComponent(customerName))
// de%20Vries%2C%20Lars

console.log(encodeURIComponent(productTitle))
// %E6%9D%B1%E4%BA%AC%20wireless%20adapter

console.log(encodeURIComponent(reviewText))
// Heel%20goed%20%E2%80%94%20werkt%20perfect

// Decoding back
console.log(decodeURIComponent('de%20Vries%2C%20Lars'))
// de Vries, Lars
Opmerking:encodeURIComponent() gebruikt de interne UTF-16-tekencodering van de JavaScript-engine en codeert vervolgens elk UTF-8-byte van het teken afzonderlijk. Een teken als ΓΌ (U+00FC) wordt gecodeerd naar %C3%BC omdat de UTF-8-representatie uit twee bytes bestaat: 0xC3 en 0xBC. Dit is correct en volgt de URI-standaard β€” servers worden verwacht de UTF-8-bytereeks terug te decoderen naar het oorspronkelijke codepunt.

JavaScript URL-coderingsfuncties β€” Tekenreferentie

De drie native coderingsbenaderingen verschillen in precies welke tekens ze coderen. De onderstaande tabel toont de uitvoer voor de meest problematische tekens:

TekenRol in URLencodeURIComponent()encodeURI()URLSearchParams
Spacewoordscheidingsteken%20%20+
&parameterscheidingsteken%26behouden%26
=sleutel=waarde%3Dbehouden%3D
+gecodeerde spatie (form)%2B%2B%2B
?querybegin%3Fbehouden%3F
#fragment%23behouden%23
/padscheidingsteken%2Fbehouden%2F
:schema / poort%3Abehouden%3A
@auth-scheidingsteken%40behouden%40
%procentliteraal%25%25%25
~niet-gereserveerdbehoudenbehoudenbehouden

De kritieke kolom is encodeURIComponent() vs. encodeURI() voor & en =: encodeURI() laat ze ongewijzigd, wat correct is bij het coderen van een volledige URL maar catastrofaal bij het coderen van een waardedie deze tekens bevat.

encodeURI() β€” Wanneer de URL-structuur bewaard moet blijven

encodeURI() is ontworpen voor het coderen van een volledige URLβ€” het bewaart alle tekens die geldige structurele onderdelen van een URI zijn: het schema (https://), de host, padscheidingstekens, queryscheidingstekens en de fragmentidentificator. Gebruik het wanneer je een URL ontvangt die spaties of niet-ASCII-tekens in padsegmenten kan bevatten, maar waarbij je de structuur intact wilt houden.

Een door de gebruiker opgegeven URL opschonen

JavaScript
// A URL pasted from a document with spaces in the path and non-ASCII chars
const rawUrl = 'https://cdn.example.com/assets/product images/MΓΌnchen chair.png'

const safeUrl = encodeURI(rawUrl)
console.log(safeUrl)
// https://cdn.example.com/assets/product%20images/M%C3%BCnchen%20chair.png

// encodeURIComponent would break it β€” it encodes the :// and all / characters
const broken = encodeURIComponent(rawUrl)
console.log(broken)
// https%3A%2F%2Fcdn.example.com%2Fassets%2Fproduct%20images%2FM%C3%BCnchen%20chair.png
// ↑ Not a valid URL β€” the scheme and slashes are destroyed
Opmerking:De URL-constructor is meestal een betere keuze dan encodeURI() voor het verwerken van door de gebruiker opgegeven URL-strings β€” het normaliseert de URL, valideert de structuur en geeft je een schone API voor toegang tot elk onderdeel. Reserveer encodeURI() voor gevallen waarbij je een tekenreeksresultaat nodig hebt en al weet dat de invoer structureel een geldige URL is.

URLSearchParams β€” De moderne aanpak voor querystrings

URLSearchParams is de idiomatische manier om querystrings te bouwen en te parsen in modern JavaScript. Het is globaal beschikbaar in alle moderne browsers en Node.js 10+, en verwerkt codering automatisch β€” je werkt met eenvoudige sleutel-waardeparen en het produceert de juiste uitvoer. Een belangrijk detail: het volgt de application/x-www-form-urlencoded-specificatie, die spaties als + codeert in plaats van %20. Dit is correct en breed ondersteund, maar je moet er rekening mee houden wanneer je server een specifiek formaat verwacht.

Een zoekverzoek-URL bouwen

JavaScript (browser / Node.js 10+)
// Building a search API URL with multiple parameters
const filters = {
  query:    'standing desk',
  category: 'office-furniture',
  minPrice: '200',
  maxPrice: '800',
  inStock:  'true',
  sortBy:   'price_asc',
}

const params = new URLSearchParams(filters)

const apiUrl = `https://api.example.com/v2/products?${params}`
console.log(apiUrl)
// https://api.example.com/v2/products?query=standing+desk&category=office-furniture&minPrice=200&maxPrice=800&inStock=true&sortBy=price_asc

// Appending additional params after construction
params.append('page', '2')
params.append('tag', 'ergonomic & adjustable')
console.log(params.toString())
// query=standing+desk&...&tag=ergonomic+%26+adjustable

Een inkomende querystring parsen

JavaScript
// Both browser (window.location.search) and Node.js (req.url) scenarios
function parseWebhookCallbackUrl(rawSearch: string) {
  const params = new URLSearchParams(rawSearch)

  return {
    eventId:     params.get('event_id'),       // null if missing
    timestamp:   Number(params.get('ts')),
    signature:   params.get('sig'),
    redirectUrl: params.get('redirect'),       // Automatically decoded
    tags:        params.getAll('tag'),         // Handles repeated keys
  }
}

const callbackQuery = '?event_id=evt_9c2f&ts=1717200000&sig=sha256%3Dabc123&redirect=https%3A%2F%2Fdashboard.internal%2F&tag=payment&tag=webhook'

const parsed = parseWebhookCallbackUrl(callbackQuery)
console.log(parsed.redirectUrl)  // https://dashboard.internal/
console.log(parsed.tags)         // ['payment', 'webhook']

URL-parameters coderen in JavaScript Fetch-verzoeken

De meest voorkomende plek waar URL-codering verschijnt in productiecode is binnen fetch()-aanroepen β€” ofwel bij het bouwen van de verzoek-URL of het verzenden van formulierdata in de verzoektekst. Elk scenario heeft zijn eigen juiste aanpak.

GET-verzoek β€” queryparameters coderen

JavaScript (browser / Node.js 18+)
async function searchInventory(params: {
  sku?:      string
  warehouse: string
  minStock:  number
  updatedAfter?: Date
}): Promise<{ items: unknown[]; total: number }> {
  const searchParams = new URLSearchParams()

  if (params.sku)          searchParams.set('sku',          params.sku)
  searchParams.set('warehouse',  params.warehouse)
  searchParams.set('min_stock',  String(params.minStock))
  if (params.updatedAfter) searchParams.set('updated_after', params.updatedAfter.toISOString())

  const url = `https://inventory.internal/api/items?${searchParams}`

  const res = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${process.env.INVENTORY_API_KEY}`,
      'Accept':        'application/json',
    },
  })

  if (!res.ok) {
    throw new Error(`Inventory API ${res.status}: ${await res.text()}`)
  }

  return res.json()
}

const results = await searchInventory({
  warehouse:    'eu-west-1',
  minStock:     10,
  updatedAfter: new Date('2025-01-01'),
})

console.log(`Found ${results.total} items`)

POST-verzoek β€” een formuliertekst URL-coderen

JavaScript
// application/x-www-form-urlencoded POST β€” used by OAuth token endpoints,
// legacy form-submission APIs, and some webhook providers
async function requestOAuthToken(
  clientId:     string,
  clientSecret: string,
  code:         string,
  redirectUri:  string,
): Promise<{ access_token: string; expires_in: number }> {
  const body = new URLSearchParams({
    grant_type:    'authorization_code',
    client_id:     clientId,
    client_secret: clientSecret,
    code,
    redirect_uri:  redirectUri,  // URLSearchParams encodes this automatically
  })

  const res = await fetch('https://oauth.provider.com/token', {
    method:  'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body:    body.toString(),
    // body: body β€” also works directly in modern environments (Fetch spec accepts URLSearchParams)
  })

  if (!res.ok) {
    const err = await res.json()
    throw new Error(`OAuth error: ${err.error_description ?? err.error}`)
  }

  return res.json()
}

Wanneer je een gecodeerde URL wilt testen of debuggen zonder een script op te zetten, plak de ruwe waarde direct in de URL Encoder β€” het codeert en decodeert direct en toont je precies wat de browser en server zullen zien. Handig voor het inspecteren van OAuth-omleidings-URI's, webhook-callback-URL's en ondertekende CDN-verzoekparameters.

URL-codering via de opdrachtregel met Node.js en Shell

Voor shellscripts, CI-pipelines of snel debuggen werken verschillende opdrachtregelbenaderingen zonder een volledig script te schrijven.

bash
# ── Node.js one-liners β€” cross-platform (macOS, Linux, Windows) ────────

# encodeURIComponent β€” encode a single value
node -e "console.log(encodeURIComponent(process.argv[1]))" "Wireless Keyboard & Mouse"
# Wireless%20Keyboard%20%26%20Mouse

# Build a complete query string
node -e "console.log(new URLSearchParams(JSON.parse(process.argv[1])).toString())"   '{"q":"standing desk","category":"office-furniture","page":"1"}'
# q=standing+desk&category=office-furniture&page=1

# Decode a percent-encoded string
node -e "console.log(decodeURIComponent(process.argv[1]))" "Wireless%20Keyboard%20%26%20Mouse"
# Wireless Keyboard & Mouse

# ── curl β€” automatic encoding ───────────────────────────────────────────
# curl --data-urlencode encodes values automatically in GET and POST
curl -G "https://api.example.com/search"   --data-urlencode "q=Wireless Keyboard & Mouse"   --data-urlencode "category=office furniture"

# ── Python one-liner (available on most systems) ─────────────────────────
python3 -c "from urllib.parse import quote; print(quote(input(), safe=''))"
# (type the string and press Enter)

# ── jq + bash: encode every value in a JSON object ───────────────────────
echo '{"q":"hello world","tag":"node & express"}' |   node -e "const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));            console.log(new URLSearchParams(d).toString())"
# q=hello+world&tag=node+%26+express

Hoogwaardige alternatief: qs

De ingebouwde URLSearchParamsondersteunt geen geneste objecten of arrays β€” de vorm van querystrings die veel API's en frameworks gebruiken. De qs-bibliotheek (30M+ wekelijkse npm-downloads) verwerkt het volledige scala aan querystring-patronen die in de praktijk voorkomen: geneste objecten met haakjesnotatie (filters[status]=active), herhaalde sleutels, aangepaste encoders en configureerbare array-serialisatieformaten.

bash
npm install qs
# or
pnpm add qs
JavaScript
import qs from 'qs'

// URLSearchParams cannot represent this structure natively
const reportFilters = {
  dateRange: {
    from: '2025-01-01',
    to:   '2025-03-31',
  },
  status:    ['published', 'archived'],
  author:    { id: 'usr_4f2a9c1b', role: 'editor' },
  workspace: 'ws-platform-eu',
}

// qs produces bracket-notation query strings used by Express, Rails, Django REST
const query = qs.stringify(reportFilters, { encode: true })
console.log(query)
// dateRange%5Bfrom%5D=2025-01-01&dateRange%5Bto%5D=2025-03-31&status%5B0%5D=published&status%5B1%5D=archived&author%5Bid%5D=usr_4f2a9c1b&author%5Brole%5D=editor&workspace=ws-platform-eu

// Human-readable (no encoding) β€” useful for debugging
console.log(qs.stringify(reportFilters, { encode: false }))
// dateRange[from]=2025-01-01&dateRange[to]=2025-03-31&status[0]=published&status[1]=archived...

// Parsing back
const parsed = qs.parse(query)
console.log(parsed.dateRange)   // { from: '2025-01-01', to: '2025-03-31' }
console.log(parsed.status)      // ['published', 'archived']

Voor platte sleutel-waardeparameters is URLSearchParams altijd de juiste keuze β€” het is ingebouwd, heeft geen overhead en wordt universeel ondersteund. Grijp naar qs alleen wanneer je geneste structuren, andere array-serialisatieformaten dan herhaalde sleutels nodig hebt, of wanneer je integreert met een backend-framework dat querystrings met haakjesnotatie verwacht.

Veelgemaakte fouten

Ik ben deze vier fouten herhaaldelijk tegengekomen in productiecodebasen β€” de meeste zijn stille fouten die alleen aan de oppervlakte komen wanneer een waarde een speciaal teken bevat, wat precies het soort fout is dat door unit tests glipt en alleen verschijnt met echte gebruikersdata.

Fout 1 β€” encodeURI() gebruiken voor queryparameterwaarden

Probleem: encodeURI() codeert &, = en + niet. Wanneer een waarde deze tekens bevat, worden ze geΓ―nterpreteerd als querystringsyntaxis en splitsen of overschrijven ze parameters stil. Oplossing: gebruik altijd encodeURIComponent() voor individuele waarden.

Before Β· JavaScript
After Β· JavaScript
// ❌ encodeURI does not encode & and = in the value
//    "plan=pro&promo=SAVE20" is treated as two separate params
const planName = 'Pro Plan (save=20% & free trial)'
const url = `/checkout?plan=${encodeURI(planName)}`
// /checkout?plan=Pro%20Plan%20(save=20%%20&%20free%20trial)
//                                          ↑ & breaks the query string
// βœ… encodeURIComponent encodes & and = safely
const planName = 'Pro Plan (save=20% & free trial)'
const url = `/checkout?plan=${encodeURIComponent(planName)}`
// /checkout?plan=Pro%20Plan%20(save%3D20%25%20%26%20free%20trial)
//                                   ↑ = and & are both encoded

Fout 2 β€” Een al gecodeerde string dubbel coderen

Probleem: encodeURIComponent() aanroepen op een waarde die al percent-gecodeerd is, verandert het % in %25, waardoor %20 %2520 wordt. De server decodeert eenmaal en ontvangt een letterlijk %20 in plaats van een spatie. Oplossing: eerst decoderen, dan opnieuw coderen, of zorgen dat de waarde nooit tweemaal gecodeerd wordt.

Before Β· JavaScript
After Β· JavaScript
// ❌ encodedParam already contains %20 β€” encoding again produces %2520
const encodedParam  = 'Amsterdam%20Office'
const url = `/api/locations/${encodeURIComponent(encodedParam)}`
// /api/locations/Amsterdam%2520Office
// Server sees: "Amsterdam%20Office" (a literal percent-twenty, not a space)
// βœ… Decode first if the value may already be encoded
const maybeEncoded = 'Amsterdam%20Office'
const clean = decodeURIComponent(maybeEncoded)  // 'Amsterdam Office'
const url   = `/api/locations/${encodeURIComponent(clean)}`
// /api/locations/Amsterdam%20Office β€” correct

Fout 3 β€” Het + / %20-verschil tussen URLSearchParams en encodeURIComponent niet meenemen

Probleem: URLSearchParams codeert spaties als + (application/x-www-form-urlencoded), terwijl encodeURIComponent() %20 gebruikt. Beide mengen in dezelfde URL β€” bijvoorbeeld een voorgecodeerde string toevoegen aan een URLSearchParams-uitvoer β€” produceert inconsistente codering die sommige parsers verwarrend vinden. Oplossing: kies één aanpak en gebruik die consistent in een URL-bouwfunctie.

Before Β· JavaScript
After Β· JavaScript
// ❌ Mixed: URLSearchParams uses + for spaces, but we're appending
//    a manually-encoded segment that uses %20
const base   = new URLSearchParams({ category: 'office furniture' })
const extra  = `sort=${encodeURIComponent('price asc')}`
const url    = `/api/products?${base}&${extra}`
// /api/products?category=office+furniture&sort=price%20asc
//              ↑ two different space encodings in the same URL
// βœ… Use URLSearchParams exclusively β€” consistent encoding throughout
const params = new URLSearchParams({
  category: 'office furniture',
  sort:     'price asc',
})
const url = `/api/products?${params}`
// /api/products?category=office+furniture&sort=price+asc

Fout 4 β€” Vergeten padsegmenten met schuine strepen te coderen

Probleem: Een resource-identifier zoals een bestandspad (reports/2025/q1.pdf) gebruikt als REST-padsegment bevat /-tekens die de serverrouter interpreteert als padscheidingstekens en doorverwijst naar een niet-bestaand eindpunt. Oplossing: gebruik altijd encodeURIComponent() voor padsegmenten die schuine strepen kunnen bevatten.

Before Β· JavaScript
After Β· JavaScript
// ❌ The file path contains / β€” the server receives a 3-segment path
//    instead of a single resource ID
const filePath = 'reports/2025/q1-financials.pdf'
const url      = `https://storage.example.com/objects/${filePath}`
// https://storage.example.com/objects/reports/2025/q1-financials.pdf
// β†’ Server routes to /objects/:year/:filename β€” 404 or wrong resource
// βœ… encodeURIComponent encodes / as %2F β€” single path segment
const filePath = 'reports/2025/q1-financials.pdf'
const url      = `https://storage.example.com/objects/${encodeURIComponent(filePath)}`
// https://storage.example.com/objects/reports%2F2025%2Fq1-financials.pdf
// β†’ Server receives the full file path as one resource identifier

JavaScript URL-coderingsmethoden β€” Snelle vergelijking

MethodeCodeert spaties alsCodeert & = ?Codeert # / :GebruiksscenarioInstallatie vereist
encodeURIComponent()%20βœ… jaβœ… jaCoderen van individuele parameterwaardenNo
encodeURI()%20❌ nee❌ neeOpschonen van een volledige URL-stringNo
URLSearchParams+βœ… jaβœ… jaBouwen en parsen van querystringsNo
URL-constructorauto per componentautoautoSamenstellen en normaliseren van volledige URL'sNo
qs-bibliotheek%20 (configureerbaar)βœ… jaβœ… jaGeneste objecten en arrays in querystringsnpm install qs

In de overgrote meerderheid van gevallen reduceer je de keuze tot drie scenario's. Gebruik URLSearchParams bij het bouwen van multi-parameter querystrings uit gestructureerde data β€” dit is de veiligste en meest leesbare optie. Gebruik encodeURIComponent() voor het coderen van een enkele waarde in een template-literal-URL, voor padsegmenten of voor waarden in systemen die %20 verwachten in plaats van + voor spaties (zoals AWS S3 Signed URLs). Grijp naar qs alleen wanneer je querystring geneste objecten of arrays bevat die URLSearchParams niet native kan vertegenwoordigen.

Veelgestelde vragen

Wat is het verschil tussen encodeURIComponent() en encodeURI() in JavaScript?
encodeURIComponent() codeert elk teken behalve de niet-gereserveerde set (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )), inclusief structurele tekens zoals & = ? # / :. Het is ontworpen voor het coderen van individuele queryparameterwaarden of padsegmenten. encodeURI() bewaart structurele URL-tekens β€” het codeert & = ? # / : @ niet β€” omdat het is ontworpen om een volledige URL op te schonen zonder de structuur te beschadigen. encodeURI() gebruiken op een waarde die & of = bevat is een veelvoorkomende bron van stille datacorruptie.
Waarom codeert URLSearchParams spaties als + in plaats van %20?
URLSearchParams volgt de application/x-www-form-urlencoded-specificatie (oorspronkelijk afgeleid van HTML-formulierverzendingen), die spaties als + codeert in plaats van %20. Zowel + als %20 zijn geldige representaties van een spatie in querystrings, en de meeste servers accepteren beide. Sommige API's β€” met name AWS Signature v4, Google API's en aangepaste REST-backends β€” vereisen echter %20. Gebruik in die gevallen encodeURIComponent() om de querystring handmatig te bouwen, of roep params.toString().replace(/\+/g, '%20') aan op de URLSearchParams-uitvoer.
Hoe codeer ik een padsegment dat schuine strepen bevat in JavaScript via URL?
Gebruik encodeURIComponent() β€” het codeert / als %2F en maakt het hele pad tot één segment. encodeURI() codeert / niet, waardoor het als een echte padscheider door de router zou worden behandeld. Dit is belangrijk voor REST-API's die resource-identifiers gebruiken in padpositie: bestandspaden (reports/2025/q1.pdf), S3-objectsleutels en samengestelde ID's (org/team/member). Na codering: encodeURIComponent('reports/2025/q1.pdf') β†’ 'reports%2F2025%2Fq1.pdf'.
Hoe decodeer ik een percent-gecodeerde URL-parameter in JavaScript?
Gebruik decodeURIComponent() voor individuele parameterwaarden, of laat URLSearchParams het automatisch afhandelen. Wanneer je new URLSearchParams(window.location.search).get('key') gebruikt, is de waarde al gedecodeerd β€” je hoeft decodeURIComponent() er niet nogmaals op aan te roepen. Roep decodeURIComponent() direct alleen aan wanneer je de ruwe gecodeerde string buiten URLSearchParams ontvangt, bijvoorbeeld uit een aangepaste header of uit een handmatig geparst URL-fragment. Let op: decodeURIComponent() gooit een URIError op misvormde reeksen zoals een kaal %-teken β€” wikkel het in een try/catch als de invoer van gebruikersdata komt.
Kan ik URLSearchParams gebruiken om geneste objecten te coderen zoals { filters: { status: "active" } }?
Nee. URLSearchParams ondersteunt alleen platte sleutel-waardeparen. Het serialiseert een genest object door .toString() aan te roepen op elke waarde, wat "[object Object]" produceert β€” stil onjuist. Gebruik voor geneste structuren de qs-bibliotheek: qs.stringify({ filters: { status: 'active' } }) produceert filters%5Bstatus%5D=active (haakjesnotatie), wat wordt begrepen door Express, Rails en Django REST Framework. Je kunt ook geneste data serialiseren als JSON-string en doorgeven als een enkele parameterwaarde: params.set('filters', JSON.stringify({ status: 'active' })).
Codeert de Fetch API queryparameters automatisch via URL?
Nee. fetch() accepteert een URL-string en geeft deze letterlijk door aan de netwerklaag β€” het parst of codeert geen queryparameters. Als je niet-gecodeerde waarden samenvoegt in de URL-string, zullen speciale tekens het verzoek beschadigen. Het juiste patroon is de URL bouwen met URLSearchParams of encodeURIComponent() voordat je het doorgeeft aan fetch(): const url = new URL('/api/search', base); url.searchParams.set('q', userInput); const res = await fetch(url). De URL-constructor en URLSearchParams samen geven je veilige automatische codering met een schone API.

Gerelateerde tools

Voor eΓ©n-klik coderen of decoderen zonder code te schrijven, plak je string direct in de URL Encoder β€” het verwerkt percent-codering en -decodering direct in je browser, met de gecodeerde uitvoer klaar om te kopiΓ«ren in een fetch-aanroep of terminal.

AC
Alex ChenFront-end & Node.js Developer

Alex is a front-end and Node.js developer with extensive experience building web applications and developer tooling. He is passionate about web standards, browser APIs, and the JavaScript ecosystem. In his spare time he contributes to open-source projects and writes about modern JavaScript patterns, performance optimisation, and everything related to the web platform.

SL
Sophie LaurentTechnisch beoordelaar

Sophie is a full-stack developer focused on TypeScript across the entire stack β€” from React frontends to Express and Fastify backends. She has a particular interest in type-safe API design, runtime validation, and the patterns that make large JavaScript codebases stay manageable. She writes about TypeScript idioms, Node.js internals, and the ever-evolving JavaScript module ecosystem.