URL encoder e decoder

Acrafto Team Sviluppatori
Aggiornato
Codifica come

Per un singolo valore di query o un segmento di percorso. Codifica tutto tranne lettere, cifre e - _ . ! ~ * ' ( ), come encodeURIComponent.

Risultato

Tutto avviene nel tuo browser e nulla di ciò che incolli viene caricato. Conta, perché gli URL portano spesso token e ID di sessione.

Con questo strumento puoi fare URL encode e decode online mentre scrivi: trasforma spazi, lettere accentate e simboli come & o ? in sequenze con codifica percentuale come %20, e le riporta a testo leggibile. La seconda scheda è un parser di URL. Divide qualsiasi indirizzo in protocollo, host, percorso e parametri della query, che puoi modificare, disattivare o ripulire dai tag di tracciamento, e riscrive per te l’URL codificato correttamente. Tutto avviene nel tuo browser.

Come fare URL encode e decode di un testo

  1. Scrivi o incolla nel campo della scheda Codifica / Decodifica. Il Risultato si aggiorna a ogni tasto.
  2. Scegli la Direzione. Codifica rende il testo sicuro per un URL, Decodifica riporta caf%C3%A9%20au%20lait a café au lait. Se incolli nel campo vuoto un testo con sequenze come %20, lo strumento passa da solo a Decodifica (Codifica invece torna indietro). Allo stesso modo, un testo semplice da codificare incollato in modalità Decodifica fa passare a Codifica, con Decodifica invece.
  3. Quando codifichi, scegli sotto Codifica come che cosa è il testo (vedi la sezione successiva). L’opzione predefinita, Valore del parametro, va bene per un singolo valore di una query.
  4. Copia mette il risultato negli appunti. Scambia sposta il risultato nel campo di input e inverte la direzione. È un controllo rapido di andata e ritorno: decodificando ciò che hai appena codificato devi riavere il testo originale.

Ogni carattere modificato dallo strumento è evidenziato nel risultato. Passaci sopra con il mouse per vedere il carattere, il suo punto di codice Unicode e i suoi byte, per esempio é U+00E9 %C3%A9. Sotto i campi trovi il numero di Caratteri, di Byte UTF-8 e di Caratteri codificati (o Caratteri decodificati). Prova un esempio carica la frase Sconto del 50 % su caffè & tè, è già finito? Sì!, che ha 48 caratteri ma 53 byte UTF-8, perché ogni lettera accentata occupa due byte.

Quando codifichi, Ogni riga separata codifica ogni riga per conto suo e mantiene gli a capo, ed è comodo per un elenco di valori o di link. Senza questa opzione anche l’a capo viene codificato e diventa %0A. Se il testo è un URL con parametri, lo strumento propone Dividi in parti, che apre l’indirizzo nella scheda del parser.

Codifica di un parametro URL, di un URL completo o di dati di un modulo

Non tutti i caratteri vanno codificati in ogni punto. Una barra separa le cartelle in un percorso, ma dentro il valore di un parametro è un semplice dato, quindi il risultato giusto dipende da ciò che codifichi. Codifica come offre quattro modalità:

  • Valore del parametro funziona come encodeURIComponent di JavaScript e va bene per un valore di query o un segmento di percorso. Codifica tutto tranne lettere, cifre e - _ . ! ~ * ' ( ), quindi un &, =, / o ? dentro al valore non può rompere l’URL. Codificando café & crème si ottiene caf%C3%A9%20%26%20cr%C3%A8me, pronto da mettere dopo q=.
  • URL completo serve per un indirizzo intero che va solo ripulito. Codifica spazi, caratteri non ASCII, caratteri di controllo, l’apice inverso e " < > \ ^ { | }, e mantiene tutto ciò che dà struttura a un URL: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Così https://example.com/search?q=café au lait&lang=fr diventa https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Le sequenze già codificate restano come sono e un % isolato diventa %25. Qui sta la differenza da encodeURI di JavaScript, che trasforma un %20 esistente in %2520 e codifica le parentesi quadre di un indirizzo IPv6 come http://[2001:db8::1]:8080/.
  • Dati del modulo segue il formato application/x-www-form-urlencoded (in inglese) prodotto dai moduli HTML e da URLSearchParams. Uno spazio diventa + e restano non codificati solo lettere, cifre e * - . _, quindi anche ! ' ( ) ~ vengono codificati.
  • RFC 3986 rigoroso lascia non codificati solo i caratteri non riservati della RFC 3986 (in inglese): lettere, cifre e - . _ ~. OAuth 1.0 (RFC 5849) e AWS Signature Version 4 richiedono esattamente questa forma, perché una firma coincide solo se entrambe le parti codificano ! o * allo stesso modo.

Gli stessi caratteri in ogni modalità:

CarattereValore del parametroURL completoDati del moduloRFC 3986 rigoroso
spazio%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Il testo è sempre codificato in UTF-8 e le cifre esadecimali sono sempre maiuscole. Se l’input contiene già sequenze come %20, una nota lo segnala e propone Decodifica invece, così non codifichi due volte il testo per errore.

Per passare un JSON in un parametro di query, minimizzalo nel JSON formatter e codificalo come Valore del parametro: {"id":7,"tags":["a","b"]} diventa %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Funziona anche al contrario: decodifica qui il parametro, poi formattalo là.

Problemi di URL decode: segni più, %2520 e sequenze errate

La decodifica di solito funziona senza storie, ma quattro situazioni fanno inciampare. Lo strumento le gestisce tutte invece di fermarsi con un errore:

  • Un segno più sta per uno spazio nei dati dei moduli e nella maggior parte delle query. Decodifica + come spazio è attiva per impostazione predefinita, quindi caf%C3%A9+au+lait diventa café au lait. In un URL completo contano come spazi solo i segni più dopo il ?, perché in un percorso il più è un carattere normale. Disattiva l’opzione quando il segno più è da intendere alla lettera. Un più codificato come %2B resta sempre un più.
  • La doppia codifica avviene quando due livelli di codice codificano lo stesso valore, cosa che la RFC 3986 sconsiglia espressamente. Ogni % diventa %25, quindi uno spazio passa da %20 a %2520. Se il risultato decodificato contiene ancora sequenze come %20, lo strumento avvisa che il testo è stato probabilmente codificato due volte e propone Decodifica di nuovo.
  • Una sequenza non valida, cioè un % non seguito da due cifre esadecimali come in 100% o %G1, fa lanciare a decodeURIComponent di JavaScript un URIError. Qui queste sequenze restano come sono, vengono segnate in rosso e contate, e il resto del testo viene decodificato.
  • I vecchi link Latin-1 risalgono a prima di UTF-8, quando alcuni siti codificavano é come singolo byte %E9. caf%E9 non è UTF-8 valido, quindi decodeURIComponent fallisce e unquote di Python restituisce caf seguito dal carattere di sostituzione U+FFFD. Lo strumento legge quei byte come Windows-1252, decodifica caf%E9 in café e aggiunge una nota che lo spiega.

I caratteri di controllo nel testo decodificato, come una tabulazione o un byte nullo, sono mostrati come simboli visibili come ␉ e ␀, ma Copia copia il testo reale.

Parser di URL: dividere un URL e modificarne i parametri

Incolla un indirizzo nel campo URL della scheda Analizza e modifica URL e viene diviso in Protocollo, Host, Porta, Percorso e Frammento, più Nome utente e Password se l’URL li contiene. I valori sono mostrati decodificati, quindi la scheda è anche il modo più rapido per decodificare i parametri di un URL: leggi caffè macinato invece di caff%C3%A8+macinato. La modifica funziona nei due sensi, come la barra degli indirizzi e la tabella dei parametri in Postman. Cambi un campo e l’URL viene riscritto subito, codificato correttamente; cambi l’URL e tutte le parti vengono rilette. Le parti che non tocchi restano esattamente come erano, carattere per carattere.

La tabella Parametri della query elenca ogni parametro con il suo Nome e il suo Valore. Togli la spunta da Includi nell’URL per escludere un parametro senza cancellarlo, utile quando cerchi quello che rompe una richiesta. Aggiungi parametro, Rimuovi parametro e Ordina dalla A alla Z fanno quello che dicono. I nomi ripetuti come tag=a&tag=b e i nomi senza valore come ?debug vengono mantenuti. Spazi nei parametri decide se gli spazi si scrivono come %20 o +; per impostazione predefinita segue l’URL che hai incollato.

I link di accesso e di pagamento portano spesso un secondo URL dentro un parametro, codificato in modo che i suoi ? e & non si mescolino con quelli esterni:

https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2

Un valore che è a sua volta un URL, tipicamente in redirect_uri, return, url o next, ottiene un pulsante Modifica l’URL interno. L’indirizzo interno https://app.example.com/callback?tab=2 si apre come livello a sé con le sue parti e i suoi parametri, un percorso di navigazione (URL principale › redirect_uri) riporta indietro e ogni modifica viene codificata di nuovo nell’URL esterno. Copia URL principale copia il risultato. Funziona anche su più livelli.

Quando la parte dopo # assomiglia a dei parametri, come #access_token=...&state=... nell’OAuth implicit flow o #/search?q=shoes nei percorsi delle single page application, una seconda tabella, Parametri del frammento, li elenca allo stesso modo.

Il parser segnala anche i problemi: un URL senza protocollo, che i browser trattano come link relativo; una porta fuori dall’intervallo da 0 a 65535; e caratteri che vanno codificati, come spazi, lettere accentate, " o <, che Codificali sistema in un solo passaggio. Un testo senza indirizzo, come a=1&b=2, viene letto come stringa di query. Per un nome di dominio internazionalizzato lo strumento mostra la forma Punycode usata da DNS e browser, quindi münchen.de diventa xn--mnchen-3ya.de, e un dominio che inizia con xn-- ottiene la sua forma leggibile.

Copia URL copia l’indirizzo finito, Apri lo apre in una nuova scheda (solo link http e https) e Copia come JSON ti dà i parametri come oggetto JSON, con i nomi ripetuti raccolti in un array.

Rimuovere UTM e altri parametri di tracciamento da un URL

I link di newsletter, annunci e social network portano parametri che servono solo a dire al sito da dove arriva il visitatore. I parametri UTM (in inglese) utm_source, utm_medium, utm_campaign, utm_term e utm_content risalgono a Urchin, il predecessore di Google Analytics. Gli ID dei clic come fbclid (Facebook), gclid (Google Ads) e msclkid (Microsoft Advertising) sono aggiunti dalle piattaforme stesse.

Il parser li contrassegna con un tag tracking e Rimuovi tracciamento (n) li elimina tutti in una volta. Oltre a ogni parametro utm_* ne riconosce più di 20 altri, come ttclid (TikTok), mc_cid (Mailchimp) e _hsenc (HubSpot). I parametri che servono alla pagina restano al loro posto: nel link del negozio di Prova un esempio, Rimuovi tracciamento (4) rimuove utm_source, utm_medium, utm_campaign e fbclid e mantiene q, size, return e il frammento #reviews.

Un link destinato a un codice QR conviene pulirlo prima qui. Senza parametri di tracciamento è più corto, e un link più corto dà un codice meno denso e più facile da scansionare.

Che cos’è la codifica percentuale e come i caratteri diventano %XX

La codifica percentuale, detta anche URL encoding, scrive un carattere come % seguito da due cifre esadecimali. Un URL può contenere solo un insieme limitato di caratteri ASCII, e alcuni hanno un compito: ? inizia la query, & separa i parametri, # inizia il frammento. La RFC 3986 li chiama caratteri riservati (: / ? # [ ] @ e ! $ & ' ( ) * + , ; =). Lettere, cifre e - . _ ~ sono non riservati e non vanno mai codificati. Tutto il resto, e ogni carattere riservato usato come semplice dato, viene codificato.

I caratteri fuori da ASCII vengono prima trasformati in byte UTF-8, e ogni byte riceve il suo %XX:

  • é è U+00E9, che UTF-8 memorizza come i due byte C3 A9, quindi diventa %C3%A9.
  • € è U+20AC, tre byte: %E2%82%AC.
  • Un’emoji come U+1F600 (faccina sorridente) occupa quattro byte: %F0%9F%98%80.

%c3%a9 e %C3%A9 significano la stessa cosa, ma la RFC 3986 raccomanda le maiuscole, che è ciò che scrive lo strumento. Una tabella della codifica percentuale dei caratteri che incontri più spesso:

CarattereCodificatoCarattereCodificato
spazio%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Aa capo%0A

URL encoding in JavaScript, Python e PHP

Ogni linguaggio ha le sue funzioni, e differiscono soprattutto nel trattamento di spazi, barre e ! ' ( ) * ~.

JavaScript ha encodeURIComponent (in inglese) per un valore, encodeURI per un indirizzo intero e URLSearchParams per la codifica dei moduli:

encodeURIComponent("café & crème")                     // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café")            // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString()  // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9")                        // "café"

decodeURIComponent non trasforma + in uno spazio e lancia un URIError davanti a una sequenza non valida come 100%.

In Python le funzioni stanno in urllib.parse. quote mantiene / per impostazione predefinita (safe='/') e per il resto codifica tutto tranne i caratteri non riservati della RFC 3986. quote_plus scrive gli spazi come + e codifica anche /:

from urllib.parse import quote, quote_plus, urlencode, unquote_plus

quote("café & crème/brûlée")       # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="")            # 'a%20b%2Fc'
quote_plus("café & crème/brûlée")  # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2})  # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait")  # 'café au lait'

In PHP, urlencode codifica come un modulo HTML e scrive lo spazio come +, mentre rawurlencode segue la RFC 3986 e scrive %20:

urlencode("café & crème");     // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème");  // "caf%C3%A9%20%26%20cr%C3%A8me"

rawurlencode dà lo stesso risultato di RFC 3986 rigoroso. urlencode corrisponde a Dati del modulo tranne che per *, che codifica come %2A.

Domande frequenti

Lo spazio va codificato come %20 o come +?

%20 funziona ovunque in un URL. Un + significa spazio solo nella stringa di query e nei dati dei moduli, il formato inviato dai moduli HTML. In un percorso + è un normale segno più, quindi /a+b resta /a+b. Quando un valore di query richiede un vero segno più, scrivilo come %2B. Nello strumento, Dati del modulo scrive gli spazi come + e le altre tre modalità come %20.

Che cosa significano %20, %2F e %3D in un URL?

Sono caratteri codificati: %20 è uno spazio, %2F una barra e %3D un segno di uguale. Altri che vedi spesso sono %26 (&), %3F (?), %3A (:), %2C (virgola) e %27 (apostrofo). Le due cifre sono il codice del carattere in esadecimale. Le lettere accentate e gli altri caratteri non ASCII richiedono da due a quattro coppie di questo tipo, come %C3%A9 per é. Incolla l'intera stringa nel decodificatore per leggerla.

Qual è la differenza tra encodeURI e encodeURIComponent?

encodeURI è pensata per un indirizzo intero e lascia stare i caratteri che lo strutturano, come : / ? # & =. encodeURIComponent è pensata per una sola parte, un valore di parametro o un segmento di percorso, e codifica anche quei caratteri, quindi https://example.com/?a=1&b=2 diventa https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. In questo strumento, Valore del parametro corrisponde a encodeURIComponent, mentre URL completo è simile a encodeURI ma mantiene le sequenze esistenti come %20 invece di trasformarle in %2520.

Come si rimuovono i parametri UTM da un URL?

Incolla il link nella scheda Analizza e modifica URL e premi Rimuovi tracciamento (n). Elimina in una volta ogni tag utm_* e gli ID dei clic come fbclid e gclid. Poi premi Copia URL. Per eliminarne solo alcuni, usa Rimuovi parametro sulle righe che non vuoi.

La codifica URL è la stessa cosa della crittografia o di Base64?

No. La codifica URL non nasconde nulla: chiunque può decodificare caf%C3%A9 in café, quindi non protegge mai una password o un token. Rende solo i caratteri sicuri da usare in un indirizzo. Base64 è un'altra codifica che trasforma qualsiasi dato, anche i file binari, in una stringa di 64 caratteri. Una stringa Base64 in un URL richiede comunque di codificare +, / e =, a meno che tu non usi la variante URL safe, che l'encoder e decoder Base64 sa produrre.

Gli URL che incollo vengono caricati o salvati?

No. Codifica, decodifica e analisi avvengono nel tuo browser e nulla di ciò che incolli viene inviato a un server. Conta, perché gli URL portano spesso token di accesso, ID di sessione o codici per reimpostare la password. Il browser ricorda solo la scheda e le opzioni scelte, mai i testi. L'unica azione che carica l'indirizzo è Apri, che lo apre in una nuova scheda proprio come cliccare sul link.

Altri strumenti per chi programma sono nella categoria Sviluppatori, e gli strumenti che trasformano un formato in un altro sono raccolti in Convertitori. Per trovare le differenze tra due URL lunghi, per esempio una chiamata API che funziona e una che fallisce, incollali nello strumento per confrontare testi e confronta per caratteri.

Apprezzerei se condividessi queste pagine con gli amici, le aggiungessi ai segnalibri o ci collegassi. Grazie! 🙏