URL Encode JavaScript — encodeURIComponent()

·Front-end & Node.js Developer·Granskad avSophie Laurent·Publicerad

Använd det kostnadsfria URL Encode Online direkt i webbläsaren — ingen installation krävs.

Prova URL Encode Online online →

När du bygger en sök-URL, skickar en omdirigeringssökväg som en frågeparameter eller konstruerar en OAuth-auktoriseringsbegäran kommer specialtecken som &, = och mellanslag att tyst förstöra URL:en om du inte URL-kodar dem först. JavaScript erbjuder tre inbyggda metoder — encodeURIComponent(), encodeURI() och URLSearchParams — var och en utformad för ett specifikt användningsfall. Att välja fel är grundorsaken till de flesta kodningsfel jag stött på i kodgranskningar. För snabb engångskodning utan kod hanterar ToolDecks URL Encoder det direkt i webbläsaren. Den här guiden täcker alla tre metoder ingående (JavaScript ES2015+ / Node.js 10+): när man använder var och en, hur de skiljer sig åt för mellanslag och reserverade tecken, verkliga Fetch- och API-mönster, CLI-användning och de fyra misstag som orsakar de flesta subtila produktionsfel.

  • encodeURIComponent() är rätt val för att koda individuella parametervärden — det kodar varje tecken utom A–Z, a–z, 0–9 och - _ . ! ~ * ' ( )
  • encodeURI() kodar en komplett URL och bevarar strukturella tecken (/ ? # & = :) — använd det aldrig för enskilda värden
  • URLSearchParams kodar nyckel-värdepar automatiskt i application/x-www-form-urlencoded-format, där mellanslag blir + istället för %20
  • Dubbelkodning är det vanligaste produktionsfelet: encodeURIComponent(encodeURIComponent(value)) förvandlar %20 till %2520
  • qs-biblioteket hanterar nästlade objekt och arrayer i querystringar native — URLSearchParams från standardbiblioteket gör det inte

Vad är URL-kodning?

URL-kodning (formellt kallat procentkodning, definierat i RFC 3986) konverterar tecken som inte är tillåtna eller har speciell betydelse i en URL till en säker representation. Varje osäkert byte ersätts med ett procenttecken följt av två hexadecimala siffror — ASCII-koden för tecknet. Ett mellanslag blir %20, ett et-tecken blir %26, ett snedstreck framåt blir %2F.

Tecknen som alltid är säkra och aldrig kodas kallas oreserverade tecken: bokstäverna A–Z och a–z, siffrorna 0–9 och de fyra symbolerna - _ . ~. Allt annat måste antingen kodas när det används som data, eller har en strukturell roll i själva URL:en (som / för att separera sökvägssegment eller &för att separera frågeparametrar). Den praktiska konsekvensen: ett produktnamn som “Wireless Keyboard & Mouse” i en frågeparameter förstör URL-strukturen om det skickas okodad.

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() — Rätt funktion för frågeparametrar

encodeURIComponent() är arbetshästen inom URL-kodning i JavaScript. Den kodar varje tecken utom den oreserverade uppsättningen (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )). Det avgörande är att den kodar alla tecken som har strukturell betydelse i URL:er — &, =, ?, #, / — vilket gör den säker att använda i parameter-värden. Ingen import behövs; det är en global funktion tillgänglig i alla JavaScript-miljöer.

Minimalt fungerande exempel

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

Koda en omdirigerings-URL som en frågeparameter

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

Koda icke-ASCII- och Unicode-tecken

JavaScript
// encodeURIComponent handles Unicode natively in all modern environments
// Each UTF-8 byte of the character is percent-encoded
const customerName = 'Lindqvist, Erik'
const productTitle = '東京 wireless adapter'
const reviewText   = 'Mycket bra — fungerar utmärkt'

console.log(encodeURIComponent(customerName))
// Lindqvist%2C%20Erik

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

console.log(encodeURIComponent(reviewText))
// Mycket%20bra%20%E2%80%94%20fungerar%20utm%C3%A4rkt

// Decoding back
console.log(decodeURIComponent('Lindqvist%2C%20Erik'))
// Lindqvist, Erik
Obs:encodeURIComponent() använder JavaScript-motorns interna UTF-16-teckenkodning och kodar sedan varje UTF-8-byte av tecknet separat. Ett tecken som ü (U+00FC) kodas till %C3%BC eftersom dess UTF-8-representation består av två bytes: 0xC3 och 0xBC. Detta är korrekt och följer URI-standarden — servrar förväntas avkoda UTF-8-bytesekvensen tillbaka till den ursprungliga kodpunkten.

JavaScript URL-kodningsfunktioner — Teckensreferens

De tre native kodningsmetoderna skiljer sig i exakt vilka tecken de kodar. Tabellen nedan visar utdata för de vanligaste problematiska tecknen:

TeckenRoll i URLencodeURIComponent()encodeURI()URLSearchParams
Spaceordseparator%20%20+
&parameterseparator%26behålls%26
=nyckel=värde%3Dbehålls%3D
+kodat mellanslag (form)%2B%2B%2B
?frågestart%3Fbehålls%3F
#fragment%23behålls%23
/sökvägsseparator%2Fbehålls%2F
:schema / port%3Abehålls%3A
@auth-separator%40behålls%40
%procentliteral%25%25%25
~oreserveradbehållsbehållsbehålls

Den kritiska kolumnen är encodeURIComponent() vs encodeURI() för & och =: encodeURI() lämnar dem orörda, vilket är korrekt vid kodning av en fullständig URL men katastrofalt vid kodning av ett värde som innehåller dessa tecken.

encodeURI() — När URL-strukturen ska bevaras

encodeURI() är utformad för att koda en komplett URL— den bevarar alla tecken som är giltiga strukturella delar av en URI: schemat (https://), hosten, sökvägsseparatorer, frågetelimitatorer och fragmentidentifieraren. Använd den när du tar emot en URL som kan innehålla mellanslag eller icke-ASCII-tecken i sökvägssegment, men du behöver hålla dess struktur intakt.

Sanera en användartillhandahållen URL

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
Obs:URL-konstruktorn är vanligtvis ett bättre val än encodeURI() för att hantera användartillhandahållna URL-strängar — den normaliserar URL:en, validerar strukturen och ger dig ett rent API för att komma åt varje komponent. Reservera encodeURI() för fall där du behöver ett strängresultat och redan vet att inmatningen strukturellt är en giltig URL.

URLSearchParams — Den moderna metoden för querystringar

URLSearchParams är det idiomatiska sättet att bygga och tolka querystringar i modernt JavaScript. Den är globalt tillgänglig i alla moderna webbläsare och Node.js 10+, och hanterar kodning automatiskt — du arbetar med enkla nyckel-värdepar och den producerar rätt utdata. En viktig detalj: den följer application/x-www-form-urlencoded-specifikationen, som kodar mellanslag som + snarare än %20. Detta är korrekt och brett stödjat, men du bör vara medveten om det när din server förväntar sig ett specifikt format.

Bygga en sökbegärans-URL

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

Tolka en inkommande querystring

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']

Hur man URL-kodar parametrar i JavaScript Fetch-begäranden

Det vanligaste stället URL-kodning förekommer i produktionskod är i fetch()-anrop — antingen vid byggandet av begärnings-URL:en eller vid sändning av formulärdata i begärandetexten. Varje scenario har sin egen korrekta metod.

GET-begäran — koda frågeparametrar

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-begäran — URL-koda en formulärkropp

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()
}

När du behöver testa eller felsöka en kodad URL utan att sätta upp ett skript, klistra in råvärdet direkt i URL Encoder — det kodar och avkodar direkt och visar exakt vad webbläsaren och servern kommer att se. Användbart för att inspektera OAuth-omdirigeringss-URI:er, webhook-callback-URL:er och signerade CDN-begäranparametrar.

URL-kodning via kommandoraden med Node.js och Shell

För shell-skript, CI-pipelines eller snabb felsökning fungerar flera kommandoradsmetoder utan att skriva ett fullständigt skript.

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

Högpresterande alternativ: qs

Den inbyggda URLSearchParams stöder inte nästlade objekt eller arrayer — formen på querystringar som används av många API:er och ramverk. Biblioteket qs (30M+ veckliga npm-nedladdningar) hanterar hela spektrumet av querystringmönster som förekommer i verkligheten: nästlade objekt med hakparentesnotation (filters[status]=active), upprepade nycklar, anpassade kodare och konfigurerbara array-serialiseringsformat.

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']

För platta nyckel-värdeparametrar är URLSearchParams alltid rätt val — det är inbyggt, har noll overhead och stöds universellt. Ta till qs bara när du behöver nästlade strukturer, andra array-serialiseringsformat än upprepade nycklar, eller när du integrerar med ett backend-ramverk som förväntar sig querystringar med hakparentesnotation.

Vanliga misstag

Jag har sett dessa fyra misstag upprepade gånger i produktionskodsbaser — de flesta är tysta fel som bara dyker upp när ett värde innehåller ett specialtecken, vilket är exakt den typ av fel som slinker igenom enhetstester och bara visar sig med riktiga användardata.

Misstag 1 — Använda encodeURI() för frågeparametervärden

Problem: encodeURI() kodar inte &, = eller +. När ett värde innehåller dessa tecken tolkas de som frågesträngssyntax och delar eller skriver tyst över parametrar. Lösning: använd alltid encodeURIComponent() för enskilda värden.

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

Misstag 2 — Dubbelkoda en redan kodad sträng

Problem: Att anropa encodeURIComponent() på ett värde som redan är procentkodat förvandlar % till %25, så %20 blir %2520. Servern avkodar en gång och tar emot ett bokstavligt %20 istället för ett mellanslag. Lösning: avkoda först, koda sedan om, eller säkerställ att värdet aldrig kodas två gånger.

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

Misstag 3 — Inte ta hänsyn till + / %20-skillnaden mellan URLSearchParams och encodeURIComponent

Problem: URLSearchParams kodar mellanslag som + (application/x-www-form-urlencoded), medan encodeURIComponent() använder %20. Att blanda båda i samma URL — till exempel lägga till en förkodad sträng till en URLSearchParams-utdata — producerar inkonsekvent kodning som förvirrar vissa tolkare. Lösning: välj en metod och använd den konsekvent i en URL-byggfunktion.

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

Misstag 4 — Glömma att koda sökvägssegment som innehåller snedstreck

Problem: En resursidentifierare som en filsökväg (reports/2025/q1.pdf) använd som ett REST-sökvägssegment innehåller /-tecken som serverroutern tolkar som sökvägsseparatorer och dirigerar till en icke-existerande slutpunkt. Lösning: använd alltid encodeURIComponent() för sökvägssegment som kan innehålla snedstreck.

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-kodningsmetoder — Snabb jämförelse

MetodKodar mellanslag somKodar & = ?Kodar # / :AnvändningsfallKräver installation
encodeURIComponent()%20✅ ja✅ jaKodning av enskilda parametervärdenNo
encodeURI()%20❌ nej❌ nejSanering av en komplett URL-strängNo
URLSearchParams+✅ ja✅ jaBygga och tolka querystringarNo
URL-konstruktornauto per komponentautoautoKonstruera och normalisera fullständiga URL:erNo
qs-biblioteket%20 (konfigurerbart)✅ ja✅ jaNästlade objekt och arrayer i querystringarnpm install qs

I de allra flesta fall reduceras valet till tre scenarier. Använd URLSearchParams när du konstruerar multi-parameter querystringar från strukturerad data — det är det säkraste och mest läsbara alternativet. Använd encodeURIComponent() för att koda ett enskilt värde i en mallsträngsliteral-URL, för sökvägssegment eller för värden i system som förväntar sig %20 istället för + för mellanslag (som AWS S3 signerade URL:er). Ta till qs bara när din querystring innehåller nästlade objekt eller arrayer som URLSearchParams inte kan representera nativt.

Vanliga frågor

Vad är skillnaden mellan encodeURIComponent() och encodeURI() i JavaScript?
encodeURIComponent() kodar varje tecken utom den oreserverade uppsättningen (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )), inklusive strukturella tecken som & = ? # / :. Den är utformad för att koda enskilda frågeparametervärden eller sökvägssegment. encodeURI() bevarar strukturella URL-tecken — den kodar inte & = ? # / : @ — eftersom den är utformad för att sanera en komplett URL utan att förstöra dess struktur. Att använda encodeURI() på ett värde som innehåller & eller = är en vanlig källa till tyst datakorruption.
Varför kodar URLSearchParams mellanslag som + istället för %20?
URLSearchParams följer application/x-www-form-urlencoded-specifikationen (ursprungligen härledd från HTML-formulärinlämningar), som kodar mellanslag som + snarare än %20. Både + och %20 är giltiga representationer av ett mellanslag i querystringar, och de flesta servrar accepterar båda. Vissa API:er — särskilt AWS Signature v4, Google API:er och anpassade REST-backends — kräver dock %20. Använd i de fallen encodeURIComponent() för att bygga querysträngen manuellt, eller anropa params.toString().replace(/\+/g, '%20') på URLSearchParams-utdatan.
Hur URL-kodar jag ett sökvägssegment som innehåller snedstreck framåt i JavaScript?
Använd encodeURIComponent() — den kodar / som %2F och förvandlar hela sökvägen till ett enda segment. encodeURI() kodar inte /, så det skulle behandlas som en riktig sökvägsseparator av routern. Detta spelar roll för REST-API:er som använder resursidentifierare i sökvägspositionen: filsökvägar (reports/2025/q1.pdf), S3-objektnycklar och sammansatta ID:n (org/team/member). Efter kodning: encodeURIComponent('reports/2025/q1.pdf') → 'reports%2F2025%2Fq1.pdf'.
Hur avkodar jag en procentkodad URL-parameter i JavaScript?
Använd decodeURIComponent() för enskilda parametervärden, eller låt URLSearchParams hantera det automatiskt. När du gör new URLSearchParams(window.location.search).get('key') är värdet redan avkodat — du behöver inte anropa decodeURIComponent() på det igen. Anropa decodeURIComponent() direkt bara när du tar emot den råa kodade strängen utanför URLSearchParams, till exempel från en anpassad header eller från ett URL-fragment som tolkats manuellt. Obs: decodeURIComponent() kastar ett URIError på felaktiga sekvenser som ett bart %-tecken — linda in det i ett try/catch om inmatningen kommer från användardata.
Kan jag använda URLSearchParams för att koda nästlade objekt som { filters: { status: "active" } }?
Nej. URLSearchParams stöder bara platta nyckel-värdepar. Den serialiserar ett nästlat objekt genom att anropa .toString() på varje värde, vilket producerar "[object Object]" — tyst felaktigt. För nästlade strukturer, använd qs-biblioteket: qs.stringify({ filters: { status: 'active' } }) producerar filters%5Bstatus%5D=active (hakparentesnotation), som förstås av Express, Rails och Django REST Framework. Alternativt kan du serialisera nästlade data som en JSON-sträng och skicka det som ett enstaka parametervärde: params.set('filters', JSON.stringify({ status: 'active' })).
Kodar Fetch API URL-frågeparametrar automatiskt?
Nej. fetch() accepterar en URL-sträng och skickar den ordagrant till nätverkslagret — den tolkar eller kodar inte frågeparametrar. Om du sammanfogar okodade värden i URL-strängen kommer specialtecken att förstöra begäran. Det korrekta mönstret är att bygga URL:en med URLSearchParams eller encodeURIComponent() innan du skickar den till fetch(): const url = new URL('/api/search', base); url.searchParams.set('q', userInput); const res = await fetch(url). URL-konstruktorn och URLSearchParams tillsammans ger dig säker automatisk kodning med ett rent API.

Relaterade verktyg

För ett-klickskodning eller -avkodning utan att skriva någon kod, klistra in din sträng direkt i URL Encoder — det hanterar procentkodning och -avkodning direkt i din webbläsare, med den kodade utdatan redo att kopiera in i ett fetch-anrop eller 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 LaurentTeknisk granskare

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.