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.

01 calcolatrice

I risultati si aggiornano mentre digiti. Ctrl/Cmd+Invio copia il risultato principale.

Risultato

    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

      Concept diagram: Input leads to Codificare testo per un uso sicuro in… leads to RisultatoInputCodificare testo per unuso sicuro in…Risultato
      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

      Scale bar: 1 Unità di input equals 1.8 Unità di output1 Unità di input1.8 Unità di output
      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

      Concept diagram: Input leads to caratteri riservati e non riservati leads to RisultatoInputcaratteri riservati enon riservatiRisultato
      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

      Comparison chart of Opzione A versus Opzione B across Case 1, Case 2, Case 3Case 1Case 2Case 3Opzione AOpzione B
      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.

      InputStile URI completoStile componente
      https://example.com/a bhttps://example.com/a%20bhttps%3A%2F%2Fexample.com%2Fa%20b
      red&bluered&bluered%26blue
      a=ba=ba%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

      Concept diagram: Input leads to Codificare una barra e un punto inte… leads to RisultatoInputCodificare una barra eun punto inte…Risultato
      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.

      CarattereMotivoCodificato
      /delimitatore percorso riservato%2F
      spazionon riservato%20
      a, n, dlettere non riservateinvariato
      ?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ù

      Comparison chart of Opzione A versus Opzione B across Case 1, Case 2, Case 3Case 1Case 2Case 3Opzione AOpzione B
      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.

      ContestoCodifica 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

      Concept diagram: Input leads to Scomporre un URL nelle sue parti leads to RisultatoInputScomporre un URL nellesue partiRisultato
      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
      ParteRuolo
      SchemaProtocollo, come https
      HostDominio o IP, con porta opzionale
      PercorsoPosizione risorsa, separata da barre
      QueryElenco parametri dopo ?, unito da &
      FragmentPosizione 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

      Concept diagram: Input leads to tabella di codifica caratteri leads to RisultatoInputtabella di codificacaratteriRisultato
      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.

      CarPercentNote
      spazio%20Oppure + in form encoding
      !%21
      #%23Delimitatore fragment
      $%24
      &%26Delimitatore coppia query
      '%27
      (%28
      )%29
      +%2BSegno più letterale
      ,%2C
      /%2FDelimitatore percorso
      :%3ASeparatore schema / host
      ;%3B
      =%3DAssegnazione parametro
      ?%3FInizio query
      @%40Separatore 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.