URL Encode JavaScript โ€” encodeURIComponent()

ยทFront-end & Node.js DeveloperยทRevisionato daSophie LaurentยทPubblicato

Usa il Codificatore URL Online gratuito direttamente nel tuo browser โ€” nessuna installazione.

Prova Codificatore URL Online online โ†’

Quando costruisci un URL di ricerca, passi un percorso di reindirizzamento come parametro di query, o componi una richiesta di autorizzazione OAuth, i caratteri speciali come &, = e gli spazi corrompono silenziosamente l'URL se non li codifichi prima. JavaScript offre tre approcci nativi โ€” encodeURIComponent(), encodeURI() e URLSearchParamsโ€” ognuno progettato per un caso d'uso diverso, e scegliere quello sbagliato รจ la causa principale della maggior parte dei bug di codifica che ho incontrato nelle code review. Per una codifica rapida senza scrivere codice, il Codificatore URL di ToolDeck lo gestisce istantaneamente nel browser. Questa guida copre tutti e tre gli approcci in profonditร  (JavaScript ES2015+ / Node.js 10+): quando usare ciascuno, come differiscono per spazi e caratteri riservati, pattern reali con Fetch e API, utilizzo da CLI, e i quattro errori che causano i bug di produzione piรน subdoli.

  • โœ“encodeURIComponent() รจ la scelta giusta per codificare i valori dei singoli parametri โ€” codifica tutti i caratteri tranne Aโ€“Z, aโ€“z, 0โ€“9 e - _ . ! ~ * ' ( )
  • โœ“encodeURI() codifica un URL completo preservando i caratteri strutturali (/ ? # & = :) โ€” non usarla mai per valori individuali
  • โœ“URLSearchParams codifica automaticamente le coppie chiave-valore usando il formato application/x-www-form-urlencoded, dove gli spazi diventano + invece di %20
  • โœ“La doppia codifica รจ il bug di produzione piรน comune: encodeURIComponent(encodeURIComponent(value)) trasforma %20 in %2520
  • โœ“La libreria qs gestisce nativamente oggetti annidati e array nelle query string โ€” URLSearchParams della stdlib non lo fa

Cos'รจ la codifica URL?

La codifica URL (formalmente chiamata percent-encoding, definita nella RFC 3986) converte i caratteri non consentiti o con significato speciale in un URL in una rappresentazione sicura. Ogni byte non sicuro viene sostituito con un segno percentuale seguito da due cifre esadecimali โ€” il codice ASCII del carattere. Uno spazio diventa %20, una e commerciale diventa %26, una barra diagonale diventa %2F.

I caratteri sempre sicuri e mai codificati sono chiamati caratteri non riservati: le lettere Aโ€“Z e aโ€“z, le cifre 0โ€“9, e i quattro simboli - _ . ~. Tutto il resto deve essere codificato quando usato come dato, o ha un ruolo strutturale nell'URL (come / che separa i segmenti di percorso o &che separa i parametri di query). La conseguenza pratica: un nome di prodotto come โ€œTastiera Wireless & Mouseโ€ in un parametro di query distrugge la struttura dell'URL se passato senza codifica.

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() โ€” La funzione giusta per i parametri di query

encodeURIComponent() รจ il motore della codifica URL in JavaScript. Codifica tutti i caratteri tranne il set non riservato (Aโ€“Z, aโ€“z, 0โ€“9, - _ . ! ~ * ' ( )). In modo critico, codifica tutti i caratteri che hanno significato strutturale negli URL โ€” &, =, ?, #, /โ€” rendendola sicura per l'uso nei valori dei parametri. Non รจ necessario alcun import; รจ una funzione globale disponibile in tutti gli ambienti JavaScript.

Esempio minimo funzionante

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

Codifica di un URL di reindirizzamento come parametro di query

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

Codifica di caratteri non-ASCII e Unicode

JavaScript
// encodeURIComponent handles Unicode natively in all modern environments
// Each UTF-8 byte of the character is percent-encoded
const customerName = 'Rossi, Marco'
const productTitle = 'ๆฑไบฌ wireless adapter'
const reviewText   = 'Ottimo โ€” funziona perfettamente'

console.log(encodeURIComponent(customerName))
// Rossi%2C%20Marco

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

console.log(encodeURIComponent(reviewText))
// Ottimo%20%E2%80%94%20funziona%20perfettamente

// Decoding back
console.log(decodeURIComponent('Rossi%2C%20Marco'))
// Rossi, Marco
Nota:encodeURIComponent() usa la codifica interna UTF-16 del motore JavaScript, poi codifica ogni byte UTF-8 del carattere separatamente. Un carattere come รผ (U+00FC) si codifica in %C3%BC perchรฉ la sua rappresentazione UTF-8 รจ di due byte: 0xC3 e 0xBC. Questo รจ corretto e segue lo standard URI โ€” ci si aspetta che i server decodifichino la sequenza di byte UTF-8 per ottenere il codepoint originale.

Funzioni di codifica URL in JavaScript โ€” Riferimento dei caratteri

I tre approcci di codifica nativi differiscono esattamente in quali caratteri codificano. La tabella seguente mostra l'output per i caratteri piรน spesso problematici:

CarattereRuolo nell'URLencodeURIComponent()encodeURI()URLSearchParams
Spaceseparatore di parole%20%20+
&separatore di parametri%26mantenuto%26
=chiave=valore%3Dmantenuto%3D
+spazio codificato (form)%2B%2B%2B
?inizio query%3Fmantenuto%3F
#frammento%23mantenuto%23
/separatore di percorso%2Fmantenuto%2F
:schema / porta%3Amantenuto%3A
@separatore di autenticazione%40mantenuto%40
%percentuale letterale%25%25%25
~non riservatomantenutomantenutomantenuto

La colonna critica รจ encodeURIComponent() versus encodeURI() per & e =: encodeURI() li lascia intatti, il che รจ corretto quando si codifica un URL completo, ma catastrofico quando si codifica un valore che contiene questi caratteri.

encodeURI() โ€” Quando preservare la struttura dell'URL

encodeURI() รจ progettata per codificare un URL completoโ€” preserva tutti i caratteri che sono parti strutturali valide di una URI: lo schema (https://), l'host, i separatori di percorso, i delimitatori di query e l'identificatore di frammento. Usala quando ricevi un URL che potrebbe contenere spazi o caratteri non-ASCII nei suoi segmenti di percorso, ma hai bisogno di mantenerne la struttura intatta.

Sanificazione di un URL fornito dall'utente

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
Nota:Il costruttore URL รจ solitamente una scelta migliore rispetto a encodeURI()per gestire stringhe URL fornite dall'utente โ€” normalizza l'URL, convalida la struttura e offre un'API pulita per accedere a ogni componente. Riserva encodeURI()per i casi in cui hai bisogno di un risultato stringa e giร  sai che l'input รจ strutturalmente un URL valido.

URLSearchParams โ€” L'approccio moderno per le query string

URLSearchParamsรจ il modo idiomatico per costruire e analizzare le query string in JavaScript moderno. รˆ disponibile globalmente in tutti i browser moderni e Node.js 10+, e gestisce la codifica automaticamente โ€” lavori con coppie chiave-valore semplici e produce l'output corretto. Un dettaglio importante: segue la specifica application/x-www-form-urlencoded, che codifica gli spazi come + invece di %20. Questo รจ corretto e ampiamente supportato, ma devi esserne consapevole quando il tuo server si aspetta un formato specifico.

Costruzione di un URL di richiesta di ricerca

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

Analisi di una query string in ingresso

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

Come codificare i parametri URL nelle richieste Fetch JavaScript

Il posto piรน comune dove la codifica URL appare nel codice di produzione รจ all'interno delle chiamate fetch()โ€” sia costruendo l'URL della richiesta sia inviando dati di form nel corpo della richiesta. Ogni scenario ha il proprio approccio corretto.

Richiesta GET โ€” codifica dei parametri di query

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`)

Richiesta POST โ€” codifica URL del corpo di un form

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

Quando hai bisogno di testare o debuggare un URL codificato senza configurare uno script, incolla il valore grezzo direttamente nel Codificatore URL โ€” codifica e decodifica istantaneamente, mostrandoti esattamente cosa vedranno il browser e il server. Utile per ispezionare URI di reindirizzamento OAuth, URL di callback di webhook e parametri di richieste firmate CDN.

Codifica URL da riga di comando con Node.js e Shell

Per script shell, pipeline CI, o debug rapido, diversi approcci da riga di comando funzionano senza scrivere uno script completo.

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

Alternativa ad alte prestazioni: qs

Il URLSearchParams nativo non supporta oggetti annidati o array โ€” la forma di query string usata da molte API e framework. La libreria qs(oltre 30M di download settimanali su npm) gestisce l'intera gamma di pattern di query string usati nella pratica: oggetti annidati con notazione a parentesi quadre (filters[status]=active), chiavi ripetute, encoder personalizzati e formati di serializzazione degli array configurabili.

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

Per i parametri semplici chiave-valore, URLSearchParams รจ sempre la scelta giusta โ€” รจ nativo, ha zero overhead ed รจ universalmente supportato. Ricorri a qs solo quando hai bisogno di strutture annidate, formati di serializzazione degli array diversi dalle chiavi ripetute, o quando ti stai integrando con un framework back-end che si aspetta query string in notazione a parentesi quadre.

Errori comuni

Ho visto questi quattro errori ripetutamente nelle basi di codice di produzione โ€” la maggior parte sono fallimenti silenziosi che emergono solo quando un valore contiene un carattere speciale, che รจ esattamente il tipo di bug che sfugge ai test unitari e appare solo con dati reali degli utenti.

Errore 1 โ€” Usare encodeURI() per i valori dei parametri di query

Problema: encodeURI() non codifica &, = nรฉ +. Quando un valore contiene questi caratteri, vengono interpretati come sintassi di query string, dividendo o sovrascrivendo silenziosamente i parametri. Soluzione: usa sempre encodeURIComponent() per i valori individuali.

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

Errore 2 โ€” Doppia codifica di una stringa giร  codificata

Problema: Chiamare encodeURIComponent() su un valore giร  codificato in percentuale trasforma il % in %25, quindi %20 diventa %2520. Il server decodifica una volta e riceve un letterale %20 invece di uno spazio. Soluzione: decodifica prima, poi ricodifica, o assicurati che il valore non venga mai codificato due volte.

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

Errore 3 โ€” Non considerare la differenza + / %20 tra URLSearchParams e encodeURIComponent

Problema: URLSearchParams codifica gli spazi come + (application/x-www-form-urlencoded), mentre encodeURIComponent() usa %20. Mescolare entrambi nello stesso URL โ€” per esempio, aggiungere una stringa pre-codificata a un output di URLSearchParams โ€” produce una codifica incoerente che confonde alcuni parser. Soluzione: scegli un approccio e usalo in modo coerente in tutta la funzione di costruzione dell'URL.

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

Errore 4 โ€” Dimenticare di codificare i segmenti di percorso che contengono barre diagonali

Problema: Un identificatore di risorsa come un percorso file (reports/2025/q1.pdf) usato come segmento di percorso REST contiene caratteri / che il router del server interpreta come separatori di percorso, instradando verso un endpoint inesistente. Soluzione: usa sempre encodeURIComponent() per i segmenti di percorso che potrebbero contenere barre diagonali.

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

Metodi di codifica URL in JavaScript โ€” Confronto rapido

MetodoCodifica gli spazi comeCodifica & = ?Codifica # / :Caso d'usoRichiede installazione
encodeURIComponent()%20โœ… sรฌโœ… sรฌCodifica valori di parametri individualiNo
encodeURI()%20โŒ noโŒ noSanifica una stringa URL completaNo
URLSearchParams+โœ… sรฌโœ… sรฌCostruire e analizzare query stringNo
Costruttore URLauto per componenteautoautoCostruire e normalizzare URL completiNo
libreria qs%20 (configurabile)โœ… sรฌโœ… sรฌOggetti annidati e array nelle query stringnpm install qs

Per la grande maggioranza dei casi, la scelta si riduce a tre scenari. Usa URLSearchParamsquando costruisci query string con piรน parametri da dati strutturati โ€” รจ l'opzione piรน sicura e leggibile. Usa encodeURIComponent() per codificare un singolo valore in un URL con template literal, per i segmenti di percorso, o per i valori in sistemi che si aspettano %20 invece di + per gli spazi (come gli URL firmati di AWS S3). Ricorri a qs solo quando la tua query string contiene oggetti annidati o array che URLSearchParams non puรฒ rappresentare nativamente.

Domande frequenti

Qual รจ la differenza tra encodeURIComponent() e encodeURI() in JavaScript?
encodeURIComponent() codifica tutti i caratteri tranne il set non riservato (Aโ€“Z, aโ€“z, 0โ€“9, - _ . ! ~ * ' ( )), inclusi i caratteri strutturali come & = ? # / :. รˆ progettata per codificare valori di parametri di query individuali o segmenti di percorso. encodeURI() preserva i caratteri strutturali dell'URL โ€” non codifica & = ? # / : @ โ€” perchรฉ รจ progettata per sanificare un URL completo senza romperne la struttura. Usare encodeURI() su un valore che contiene & o = รจ una fonte comune di corruzione silenziosa dei dati.
Perchรฉ URLSearchParams codifica gli spazi come + invece di %20?
URLSearchParams segue la specifica application/x-www-form-urlencoded (originariamente derivata dagli invii di form HTML), che codifica gli spazi come + invece di %20. Sia + che %20 sono rappresentazioni valide di uno spazio nelle query string, e la maggior parte dei server accetta entrambi. Tuttavia, alcune API โ€” in particolare AWS Signature v4, le API Google e i backend REST personalizzati โ€” richiedono %20. Per questi casi, usa encodeURIComponent() per costruire manualmente la query string, o chiama params.toString().replace(/\+/g, '%20') sull'output di URLSearchParams.
Come codificare in URL un segmento di percorso che contiene barre diagonali in JavaScript?
Usa encodeURIComponent() โ€” codifica / come %2F, trasformando l'intero percorso in un singolo segmento. encodeURI() non codifica /, quindi verrebbe trattato come un vero separatore di percorso dal router. Questo รจ importante per le API REST che usano identificatori di risorsa in posizione di percorso: percorsi di file (reports/2025/q1.pdf), chiavi di oggetti S3 e ID composti (org/team/member). Dopo la codifica: encodeURIComponent('reports/2025/q1.pdf') โ†’ 'reports%2F2025%2Fq1.pdf'.
Come decodificare un parametro URL codificato in percentuale in JavaScript?
Usa decodeURIComponent() per i valori di parametri individuali, o lascia che URLSearchParams lo gestisca automaticamente. Quando fai new URLSearchParams(window.location.search).get('key'), il valore รจ giร  decodificato โ€” non รจ necessario chiamare decodeURIComponent() di nuovo. Chiama decodeURIComponent() direttamente solo quando ricevi la stringa codificata grezza al di fuori di URLSearchParams, per esempio da un header personalizzato o da un frammento di URL analizzato manualmente. Nota: decodeURIComponent() lancia un URIError su sequenze malformate come un % isolato โ€” avvolgilo in un try/catch se l'input proviene da dati utente.
Posso usare URLSearchParams per codificare oggetti annidati come { filters: { status: "active" } }?
No. URLSearchParams supporta solo coppie chiave-valore piatte. Serializza un oggetto annidato chiamando .toString() su ogni valore, il che produce "[object Object]" โ€” silenziosamente sbagliato. Per le strutture annidate, usa la libreria qs: qs.stringify({ filters: { status: 'active' } }) produce filters%5Bstatus%5D=active (notazione a parentesi quadre), compresa da Express, Rails e Django REST Framework. In alternativa, serializza i dati annidati come stringa JSON e passali come valore di un singolo parametro: params.set('filters', JSON.stringify({ status: 'active' })).
La Fetch API codifica automaticamente i parametri di query nell'URL?
No. fetch() accetta una stringa URL e la passa verbatim al layer di rete โ€” non analizza nรฉ codifica i parametri di query. Se concateni valori non codificati nella stringa URL, i caratteri speciali corrompono la richiesta. Il pattern corretto รจ costruire l'URL con URLSearchParams o encodeURIComponent() prima di passarlo a fetch(): const url = new URL('/api/search', base); url.searchParams.set('q', userInput); const res = await fetch(url). Il costruttore URL e URLSearchParams insieme ti offrono una codifica automatica sicura con un'API pulita.

Strumenti correlati

Per codificare o decodificare con un clic senza scrivere codice, incolla la tua stringa direttamente nel Codificatore URL โ€” gestisce la percent-encoding e la decodifica istantaneamente nel tuo browser, con l'output codificato pronto da copiare in una chiamata fetch o nel terminale.

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 LaurentRevisore tecnico

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.