Codifica e decodifica URL
Percent-encoding di testo per URL o decodifica di sequenze %HH in caratteri. Confronta modalità componente e URI completo, e perché %20 e + non sono uguali.
Tutti i calcoli vengono eseguiti nel browser. Nulla di ciò che inserisci viene inviato a un server.
I risultati si aggiornano mentre digiti. Ctrl/Cmd+Invio copia il risultato principale.
Risultato
—
Vista bit
Mostra il procedimento
Codifica e decodifica URL applica il percent-encoding RFC 3986 al testo e inverte le sequenze %HH fino ai caratteri. La modalità componente codifica caratteri riservati come /, ? e & così possono stare al sicuro dentro un singolo parametro di query. La modalità URI completo preserva i delimitatori strutturali così un indirizzo completo resta un link utilizzabile. La gestione degli spazi offre sia %20 sia il segno più della form-encoding.
Tutta la codifica e la decodifica avviene nel browser. Nulla di ciò che incolli viene inviato a un server.
Codificare testo per un uso sicuro in un URL
Il percent-encoding sostituisce byte non sicuri o riservati con un segno percento seguito da due cifre esadecimali. Le cifre sono il valore del byte, di solito da UTF-8. Inserisci una stringa, scegli modalità componente o URI completo e copia il risultato codificato in una query string, segmento di percorso o destinazione di redirect.
I caratteri già nel set non riservato passano invariati. Tutto il resto diventa sequenze %HH in modalità componente. La codifica è reversibile quando le stesse regole sono usate in decodifica; mescolare segni più da form-encoding con %20 in stile percorso è la fonte usuale di round trip rotti.
Decodificare una stringa percent-encoded
La decodifica trova ogni % seguito da due cifre hex, converte quella coppia in un byte e ricostruisce il testo originale con la codifica caratteri selezionata. Un % isolato o un % con cifre non hex è un errore. I segni più possono essere trattati opzionalmente come spazi quando l'input proviene da corpi application/x-www-form-urlencoded.
La codifica annidata compare quando un valore è stato codificato due volte. Decodificare una volta può lasciare ancora sequenze %25 che rappresentano un percento letterale. Decodifica di nuovo solo quando quel secondo strato era intenzionale; una doppia decodifica cieca corrompe dati che contenevano un % reale.
Capire caratteri riservati e non riservati
RFC 3986 divide ASCII in caratteri non riservati che non richiedono mai codifica in un URI, e caratteri riservati che portano significato strutturale come delimitatori. Lettere, cifre e -_.~ non riservati restano letterali. Segni riservati come /, ? e & devono essere percent-encoded quando compaiono come dati piuttosto che come sintassi che incornicia l'URL.
Non riservati: A a Z, a a z, 0 a 9, trattino -, underscore _, punto ., tilde ~
Riservati (gen-delims): `: / ?
Riservati (sub-delims): ! $ & ' ( ) * + , ; =
I caratteri non riservati restano letterali. I caratteri riservati devono essere codificati quando compaiono come dati piuttosto che come delimitatori. Un punto interrogativo dentro un valore di parametro è dato; un punto interrogativo che avvia la query string è struttura. La selezione della modalità è come la calcolatrice sa quale ruolo gioca ogni carattere.
Codificare un URL intero rispetto a un singolo parametro
La codifica URI completo, simile a encodeURI in JavaScript, lascia soli i caratteri strutturali così https:// e le barre del percorso sopravvivono. La codifica componente, simile a encodeURIComponent, codifica quei caratteri così un valore può stare dentro un parametro senza rompere l'URL circostante. Scegliere la modalità sbagliata o distrugge un link o lascia delimitatori che dividono la query in modo errato.
| Input | Stile URI completo | Stile componente |
|---|---|---|
https://example.com/a b | https://example.com/a%20b | https%3A%2F%2Fexample.com%2Fa%20b |
red&blue | red&blue | red%26blue |
a=b | a=b | a%3Db |
Codificare un URL intero con modalità componente lo distrugge come link: i due punti dello schema e le barre diventano %3A e %2F. Codificare un singolo parametro con modalità URI completo lascia & e = intatti, cosa che divide la query in modo errato. Scegli la modalità che corrisponde allo slot che la stringa occuperà.
Codificare una barra e un punto interrogativo
La stringa di riferimento / and ? in modalità componente diventa %2F%20and%20%3F. La barra e il punto interrogativo sono delimitatori riservati trattati qui come testo payload, quindi ciascuno viene escapato. Gli spazi diventano %20, mentre le lettere in and sono non riservate e passano invariate da sinistra a destra lungo la stringa.
| Carattere | Motivo | Codificato |
|---|---|---|
/ | delimitatore percorso riservato | %2F |
| spazio | non riservato | %20 |
a, n, d | lettere non riservate | invariato |
? | delimitatore query riservato | %3F |
Percorri la stringa da sinistra a destra: codifica /, codifica lo spazio, passa and, codifica lo spazio, codifica ?. Il risultato %2F%20and%20%3F è sicuro da mettere in un parametro di query chiamato, per esempio, q. Usare modalità URI completo sulla stessa stringa lascerebbe / e ? letterali, corretto solo quando quei caratteri sono struttura e non testo payload.
Capire %20 rispetto al segno più
Uno spazio si codifica come %20 nei percorsi URI e nelle query string moderne che seguono RFC 3986. I form HTML che inviano come application/x-www-form-urlencoded storicamente codificano gli spazi come + invece. Entrambe le convenzioni compaiono nel traffico di produzione, e trattarle come identiche è il bug di codifica spazi più comune quando si decodificano input misti.
| Contesto | Codifica spazio |
|---|---|
| Segmento percorso | %20 |
| Query RFC 3986 | %20 |
| Corpo form / query legacy | + |
Un segno più letterale nei dati deve essere codificato come %2B, altrimenti un decoder form lo tratterà come spazio. La calcolatrice indica quale convenzione spazio è attiva così un + decodificato non viene scambiato per un carattere più quando la modalità form è attiva, e un %20 non viene rifiutato quando la modalità percorso è attiva.
Scomporre un URL nelle sue parti
Un URL tipico ha schema, host, porta opzionale, percorso, query string e fragment, e le regole di codifica differiscono per parte. Delimitatori strutturali come ://, /, ?, &, = e # restano letterali quando incorniciano l'indirizzo.
Nomi parametro, valori parametro e segmenti di percorso che portano dati sono codificati individualmente in modalità componente prima che quei delimitatori li uniscano.
https://example.com:443/search?q=a%20b&lang=en#top
└─┬─┘ └─────┬─────┘ └─┬──┘ └───────┬───────┘ └┬┘
scheme host path query fragment
| Parte | Ruolo |
|---|---|
| Schema | Protocollo, come https |
| Host | Dominio o IP, con porta opzionale |
| Percorso | Posizione risorsa, separata da barre |
| Query | Elenco parametri dopo ?, unito da & |
| Fragment | Posizione lato client dopo #, non inviato al server nell'URI della richiesta allo stesso modo |
Codifica nomi e valori parametro individualmente in modalità componente, poi unisci con & e = letterali. Codifica segmenti di percorso individualmente se contengono spazi o caratteri riservati, mantenendo letterali le barre che separano i segmenti.
Leggere la tabella di codifica caratteri
La tabella sotto elenca caratteri riservati e non sicuri comuni con le loro forme percent sotto codifica byte UTF-8. Uno spazio diventa %20, una e commerciale %26 e un cancelletto %23. I caratteri non ASCII si espandono in più unità %HH perché ogni byte UTF-8 è codificato separatamente piuttosto che come un singolo glifo astratto.
| Car | Percent | Note |
|---|---|---|
| spazio | %20 | Oppure + in form encoding |
! | %21 | |
# | %23 | Delimitatore fragment |
$ | %24 | |
& | %26 | Delimitatore coppia query |
' | %27 | |
( | %28 | |
) | %29 | |
+ | %2B | Segno più letterale |
, | %2C | |
/ | %2F | Delimitatore percorso |
: | %3A | Separatore schema / host |
; | %3B | |
= | %3D | Assegnazione parametro |
? | %3F | Inizio query |
@ | %40 | Separatore userinfo |
[ | %5B | |
] | %5D |
Il testo non ASCII è prima espresso come byte UTF-8, poi ogni byte è percent-encoded. Un singolo carattere può quindi espandersi in due o tre unità %HH. Approfondimenti su codifica caratteri per Shift JIS e set legacy simili stanno con lo strumento Base64; questa pagina collega piuttosto che ripetere quel catalogo.
Domande frequenti
Cos'è il percent-encoding?
Il percent-encoding sostituisce un byte con % seguito da due cifre esadecimali del valore di quel byte. Permette a caratteri riservati e non ASCII di viaggiare dentro URL senza essere letti come sintassi. La decodifica inverte la sostituzione.
Quando usare la codifica componente?
Usa la codifica componente per un singolo nome o valore parametro, un segmento di percorso che è puro dato, o qualsiasi stringa che sarà inserita accanto a delimitatori strutturali. Codifica /, ?, & e = così non possono dividere l'URL.
Quando usare la codifica URI completo?
Usa la codifica URI completo quando l'input è già un URL completo e solo caratteri illegali come spazi dovrebbero cambiare. Due punti e barre strutturali restano letterali così il risultato resta un indirizzo cliccabile.
Perché / and ? diventa %2F%20and%20%3F?
In modalità componente la barra e il punto interrogativo sono trattati come dati, quindi codificano in %2F e %3F. Gli spazi diventano %20. Le lettere in and sono non riservate e restano così come sono.
+ è uguale a %20?
No. %20 è la codifica RFC 3986 per uno spazio. + significa spazio solo nei dati application/x-www-form-urlencoded. Un segno più letterale deve essere %2B altrimenti i decoder form lo trasformano in spazio.
Quali caratteri non richiedono mai codifica?
Il set non riservato: lettere, cifre, trattino, underscore, punto e tilde. Quei caratteri restano letterali in entrambe le modalità. Codificarli funziona ancora ma aggiunge lunghezza inutile.
Come sono codificati i caratteri non ASCII?
Sono convertiti prima in byte UTF-8, poi ogni byte è percent-encoded. Un carattere visibile può diventare più sequenze %HH. La decodifica deve usare UTF-8 per ricostruire il testo originale.
Decodificare due volte ripara un URL rotto?
Solo se il valore è stato deliberatamente codificato due volte. Altrimenti il secondo passaggio corrompe sequenze % letterali che facevano parte dei dati. Decodifica una volta, ispeziona e decodifica di nuovo solo quando i pattern %25 mostrano un secondo strato.
È uguale a Base64?
No. Il percent-encoding fa escape dei caratteri per gli URI. Base64 mappa byte arbitrari in un alfabeto a 64 caratteri per il trasporto in protocolli testuali. Usa ciascuno per il suo compito.
Gli URL incollati vengono caricati?
No. Codifica e decodifica avvengono solo nel browser. Query string che contengono token o fragment di sessione non vengono trasmessi a un server da questo strumento.
Riepilogo
Codifica e decodifica URL percent-encoda e decodifica testo secondo le regole RFC 3986, con modalità separate per URI completi e componenti individuali. Il riferimento / and ? diventa %2F%20and%20%3F in modalità componente. Gli spazi usano %20 nei contesti URI e possono usare + nella form encoding, che è una convenzione diversa.
I caratteri riservati mantengono il loro significato solo quando restano letterali come struttura; codificali quando sono payload. Tutto il lavoro resta sul dispositivo.