Codifica o decodifica URL di qualsiasi testo
Applica il percent-encoding a un valore di query, a un segmento di percorso o a un intero URL, oppure riporta le sequenze %XX a testo leggibile. Gestisce UTF-8, spazi come + in stile modulo e un valore per riga. Nulla lascia il tuo browser.
Come codificare o decodificare un URL
- Incolla il testo, il valore o l’URL nella casella di input.
- Scegli il tipo di codifica. Per un singolo valore di query o segmento di percorso, lascia Componente. Per un indirizzo completo in cui vanno sistemati solo gli spazi e le lettere non ASCII, scegli URL intero. Per dati che verranno letti come invio di un modulo HTML, scegli Modulo.
- Premi Codifica o Decodifica. Con Un valore per riga spuntato, ogni riga viene elaborata a parte, così puoi convertire in un colpo solo un intero elenco di parametri o di URL.
- Copia il risultato, oppure premi Usa il risultato come input per rielaborarlo, per esempio per aprire un valore che era stato codificato due volte.
Quando decodifichi un URL completo con una stringa di query, lo strumento elenca anche nome e valore di ogni parametro in chiaro: è il modo più rapido per leggere un lungo URL di tracciamento o di reindirizzamento.
Che cos’è il percent-encoding
Un URL può contenere solo un insieme limitato di caratteri ASCII, e molti di questi hanno un compito: ? apre la query, & separa i parametri, # apre il frammento, / separa i segmenti del percorso. Il percent-encoding è il modo in cui entra tutto il resto. Ogni carattere viene convertito nei suoi byte UTF-8 e ogni byte si scrive come % più due cifre esadecimali. Uno spazio è un solo byte, quindi diventa %20; é sono due byte, %C3%A9; una emoji come 😀 ne sono quattro, %F0%9F%98%80. La decodifica fa il percorso inverso.
Le regole vengono dalla RFC 3986, sezione 2, lo standard che definisce la sintassi degli URI. Raccomanda le cifre esadecimali maiuscole (%3A, non %3a), prescrive di codificare prima il testo in byte UTF-8 e avverte che le implementazioni non devono applicare il percent-encoding né la decodifica alla stessa stringa più di una volta.
Caratteri riservati e non riservati (RFC 3986)
La RFC 3986 divide i caratteri che un URL può contenere in due gruppi:
- Non riservati: lettere
A–Z a–z, cifre0–9e- . _ ~. Non hanno mai bisogno di codifica e significano la stessa cosa codificati o no. - Riservati: i delimitatori generali
: / ? # [ ] @e i sotto-delimitatori! $ & ' ( ) * + , ; =. Possono portare struttura, quindi ogni volta che uno fa parte dei tuoi dati e non della sintassi dell’URL, va codificato con il percent-encoding.
Tutto il resto, compresi gli spazi, lo stesso %, le virgolette, le parentesi angolari e ogni carattere non ASCII, in un URL non è ammesso così com’è e va sempre codificato. I più comuni:
| Carattere | Codificato | Perché conta |
|---|---|---|
| spazio | %20 (o + nei dati di un modulo) | Non è ammesso affatto negli URL |
& | %26 | Aprirebbe un nuovo parametro di query |
= | %3D | Separerebbe il nome di un parametro dal suo valore |
? | %3F | Aprirebbe la stringa di query |
# | %23 | Taglierebbe tutto ciò che segue nel frammento, che non viene mai inviato al server |
/ | %2F | Creerebbe un segmento di percorso in più |
+ | %2B | Verrebbe letto come spazio nelle query codificate come modulo |
% | %25 | Verrebbe letto come inizio di una sequenza di escape |
: @ | %3A %40 | Delimitano schema, credenziali e host |
é | %C3%A9 | Non ASCII, codificato come i suoi due byte UTF-8 |
Componente, URL intero, RFC 3986 o modulo: quale usare
Lo stesso input si codifica in modo diverso a seconda di dove andrà a finire il risultato. Per l’input Tom & Jerry's (2024)/ü:
- Componente dà
Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. ÈencodeURIComponentdi JavaScript, che codifica tutto tranne lettere, cifre e- _ . ! ~ * ' ( ). Usalo per un singolo valore di query, un segmento di percorso o un URL che stai inserendo nel parametro di un altro URL, come la destinazione di un reindirizzamento. - RFC 3986 rigoroso dà
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Codifica in più! ' ( ) *, che la RFC 3986 riserva come sotto-delimitatori anche seencodeURIComponentli lascia stare. Usalo quando un parser rigoroso o uno schema di firma delle richieste si aspetta esattamente l’insieme della RFC. - Modulo dà
Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Segue il formato application/x-www-form-urlencoded dello standard URL del WHATWG: restano letterali solo lettere, cifre e* - . _, e lo spazio diventa+. È ciò che inviano un modulo HTML eURLSearchParams. - URL intero dà
Tom%20&%20Jerry's%20(2024)/%C3%BC. ÈencodeURI, che lascia intatti; / ? : @ & = + $ , #perché presume che stiano già svolgendo il loro compito in un URL completo. Usalo solo per ripulire un indirizzo intero che contiene spazi o testo non ASCII. Mai per un valore: un&dentro un valore aprirebbe in silenzio un nuovo parametro.
%20 o +: gli spazi negli URL
Esistono due convenzioni affiancate. Nella sintassi degli URL della RFC 3986 lo spazio è sempre %20 e il + è solo un segno più. Nel formato di codifica dei moduli che i browser usano quando inviano un modulo con GET, lo spazio si scrive +, e il parser del WHATWG per quel formato sostituisce ogni + con uno spazio prima di decodificare. Quindi ?q=a+b per un parser di dati di modulo significa «a b», mentre /a+b in un percorso significa «a+b».
Ecco perché il decodificatore ha l’opzione Tratta + come spazio. Spuntala per le query prodotte da moduli, campi di ricerca e la maggior parte degli strumenti di analytics. Lasciala disattivata per i percorsi e per i valori in cui il più è vero, come un indirizzo email del tipo nome+tag@esempio.it, che si codifica come nome%2Btag%40esempio.it.
La stessa cosa nel codice
- JavaScript:
encodeURIComponent()edecodeURIComponent()per i valori,encodeURI()per gli URL interi eURLSearchParamsper le query in stile modulo con spazi come+(vedi MDN). - Python:
urllib.parse.quote()lascia/non codificato per impostazione predefinita e scrive gli spazi come%20, per i percorsi;quote_plus()codifica/e scrive gli spazi come+, per i valori dei moduli (vedi la documentazione di Python). - PHP:
rawurlencode()segue la RFC 3986 e scrive gli spazi come%20;urlencode()scrive gli spazi come+(vedi il manuale di PHP).
Problemi comuni nella codifica degli URL
Doppia codifica: %2520 invece di %20
Se un URL contiene %2520, %253A o simili, qualcosa ha codificato una stringa già codificata; %25 è il segno di percentuale codificato. Decodifica una volta e controlla il risultato. Lo strumento ti avvisa quando un risultato decodificato contiene ancora sequenze con il percento, e Usa il risultato come input ti permette di decodificare lo strato successivo. La soluzione nel codice è codificare ogni valore esattamente una volta, nel momento in cui costruisci l’URL.
Errori «Malformed URI sequence»
I decodificatori rigorosi rifiutano un % non seguito da due cifre esadecimali e le sequenze di byte che non sono UTF-8 valido. Questo decodificatore è invece tollerante: decodifica ogni sequenza valida, lascia com’è un % isolato, sostituisce i byte non validi con il carattere di sostituzione � e ti dice di averlo fatto, così puoi trovare il punto rotto invece di non ottenere nulla.
Un valore che si interrompe a # o &
Se un parametro arriva troncato, il valore conteneva un # o un & non codificato, di solito perché l’URL è stato assemblato per concatenazione di stringhe o con la codifica URL intero. Codifica il valore in modalità Componente.
Codificare un intero URL lo rompe
Passare un URL completo in modalità Componente trasforma https:// in https%3A%2F%2F. È corretto solo se l’URL è a sua volta il valore di un parametro dentro un altro URL. Altrimenti codifica solo la parte che stai inserendo, oppure usa la modalità URL intero.
Altri strumenti per gli URL
Crea link di campagna completi con il generatore UTM, togli i parametri di tracciamento con il pulitore di URL o guarda ogni salto che compie un link con la verifica dei redirect. Per trasformare uno script in un segnalibro da un clic, il generatore di bookmarklet ne fa il percent-encoding al posto tuo. E se mentre lavori salvi pagine di riferimento come la RFC, Marqly le tiene in un’unica libreria ricercabile: vedi Marqly per gli sviluppatori (in inglese).
Domande frequenti
Che cosa fa la codifica degli URL?
Sostituisce i caratteri non sicuri o dotati di un significato dentro un URL con un segno di percentuale e due cifre esadecimali per ogni byte UTF-8. Uno spazio diventa %20, & diventa %26 e é diventa %C3%A9. Così qualsiasi testo può viaggiare dentro un URL senza essere scambiato per la struttura dell’URL stesso.
Che differenza c’è tra encodeURI ed encodeURIComponent?
encodeURIComponent codifica tutto tranne lettere, cifre e - _ . ! ~ * ' ( ), quindi è la scelta giusta per un singolo valore di query o un segmento di percorso. encodeURI lascia intatti anche ; / ? : @ & = + $ , #, perché presume che tu stia passando un URL completo e già strutturato. Usa la modalità Componente per i valori e la modalità URL intero solo per indirizzi completi.
Lo spazio va scritto %20 o +?
Entrambi sono corretti, in contesti diversi. %20 funziona ovunque in un URL. Il segno + significa spazio solo nelle query codificate come modulo (application/x-www-form-urlencoded), cioè quelle prodotte dai moduli HTML e da URLSearchParams. In un percorso, il + è un più letterale. Quando decodifichi una query arrivata da un modulo, spunta «Tratta + come spazio».
Perché il mio URL contiene %2520?
È stato codificato due volte. Il primo passaggio ha trasformato lo spazio in %20; il secondo ha codificato il % stesso come %25, dando %2520. La RFC 3986 dice che la stessa stringa non va codificata né decodificata più di una volta. Decodifica una volta per vedere se ottieni di nuovo %20, poi decodifica ancora.
Posso codificare o decodificare molti URL insieme?
Sì. Incolla un valore per riga e lascia spuntato «Un valore per riga». Ogni riga viene codificata o decodificata a parte, così le interruzioni di riga si conservano invece di diventare %0A.
Quali caratteri vanno codificati?
Tutto ciò che sta fuori dall’insieme dei caratteri non riservati della RFC 3986 (lettere, cifre, trattino, punto, trattino basso, tilde) va codificato quando fa parte di un valore e non della struttura dell’URL. Quindi spazi, lettere non ASCII, % e i delimitatori riservati come ? # & = / : @ e +.
Il mio testo viene caricato da qualche parte?
No. Codifica, decodifica e analisi della query girano nel tuo browser con funzioni JavaScript integrate. Nulla viene inviato a un server.





