UltKit

Codifica e decodifica URL

Rende un testo sicuro da inserire in un URL, oppure riconverte le sequenze come %20 in caratteri leggibili. Lo strumento usa le funzioni encodeURIComponent, encodeURI e decodeURIComponent del browser, elenca i parametri della query in una tabella e non invia nulla a un server.

Modalità

0 caratteri · 0 parole · 0 righe

0 caratteri · 0 parole · 0 righe

Funziona interamente in questa scheda del browser. Il testo non viene mai caricato né salvato.

Cosa codifica ciascuna funzione

Calcolato con le funzioni stesse del browser. encodeURIComponent non modifica lettere, cifre e questi segni: ! ' ( ) * - . _ ~

CarattereencodeURIComponentencodeURI
(spazio)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Percent-encoding e caratteri riservati secondo RFC 3986

Un URL può contenere solo un insieme limitato di caratteri ASCII. La RFC 3986, la specifica del 2005 sulla sintassi degli URI, li divide in due gruppi. I caratteri non riservati, A–Z, a–z, 0–9 e i quattro simboli - . _ ~, non richiedono mai la codifica. I caratteri riservati hanno una funzione: i delimitatori generali : / ? # [ ] @ separano schema, host, percorso, query e frammento, mentre i sotto-delimitatori ! $ & ' ( ) * + , ; = separano gli elementi al loro interno, come fanno & e = in una query string. Tutto il resto, e qualsiasi carattere riservato usato come semplice dato, deve essere codificato in percent-encoding.

Il percent-encoding scrive un byte come % seguito da due cifre esadecimali. Il testo viene prima convertito in UTF-8: uno spazio diventa %20, una é (due byte) diventa %C3%A9 e un'emoji diventa quattro gruppi %XX. Per questo una ricerca per "café & bar" finisce in un link come caf%C3%A9%20%26%20bar: la & viene codificata perché il server non la interpreti come l'inizio di un nuovo parametro.

encodeURIComponent, encodeURI e decodifica

encodeURIComponent è la scelta giusta per un singolo elemento, come il valore di una query, un segmento di percorso o un URL di reindirizzamento passato come parametro. Codifica tutto tranne i caratteri non riservati e ! ' ( ) *, che JavaScript lascia invariati per ragioni storiche. encodeURI (URL completo) presume che l'input sia già un indirizzo completo e mantiene intatti i caratteri riservati, quindi in https://example.com/a b?q=1 viene codificato solo lo spazio. Usare encodeURI sul valore di un parametro è un errore classico: una & o un # nel valore resterebbero e romperebbero l'URL.

Decodifica annulla l'una o l'altra funzione. I moduli HTML inviati con GET usano il vecchio formato application/x-www-form-urlencoded, in cui lo spazio è scritto come + anziché %20: lasciare selezionata l'opzione Tratta + come spazio in quei casi, e deselezionarla quando il segno più è letterale, come in un numero di telefono. Se l'input contiene un % non seguito da due cifre esadecimali, oppure byte che non sono UTF-8 valido, la decodifica non va a buon fine e mostra un messaggio chiaro invece di tirare a indovinare. Quando il testo contiene una query string, i suoi parametri compaiono decodificati in una tabella sotto lo strumento. Per i dati binari negli URL l'alternativa abituale è Base64url.

Domande frequenti

In un URL lo spazio va scritto %20 o con il segno più?
Nei percorsi e secondo la RFC 3986, lo spazio è %20. La forma + indica uno spazio solo nelle query string codificate come fanno i moduli HTML, quindi %20 è la scelta sicura ovunque.
Perché nel mio URL compare %2520?
È stato codificato due volte. Al primo passaggio lo spazio è diventato %20, al secondo il simbolo % stesso è stato codificato come %25. Decodifica una sola volta per eliminare il livello in più e codifica i valori in un solo punto del codice.
Quali caratteri non richiedono mai il percent-encoding?
L'insieme dei caratteri non riservati della RFC 3986: le lettere da A a Z maiuscole e minuscole, le cifre da 0 a 9, il trattino, il punto, il trattino basso e la tilde.
Un URL può contenere lettere accentate o non latine senza codifica?
I browser li mostrano, ma in rete ogni carattere non ASCII in un percorso o in una query viene inviato come UTF-8 in percent-encoding. I nomi di dominio usano un sistema a parte, Punycode, che li trasforma in etichette xn--.
Perché la decodifica segnala una sequenza non valida?
Il testo contiene un % non seguito da due cifre esadecimali, come un "100%" letterale, oppure i byte non si decodificano in UTF-8 valido. Codifica i % isolati come %25 prima di decodificare.