Codifica e decodifica URL con percent-encoding. Supporta encoding completo o solo dei componenti (query string). Istantaneo.
L'URL encoding (percent-encoding, RFC 3986) converte i caratteri non consentiti negli URL in una sequenza %XX, dove XX è il codice esadecimale del byte UTF-8. Lo spazio diventa %20, la chiocciola %40, le lettere accentate come à diventano %C3%A0. Questo garantisce che qualsiasi URL sia trasmissibile su qualsiasi rete HTTP e interpretabile da qualsiasi server, indipendentemente dal charset. Il processo inverso — da %C3%A0 ad à — si chiama URL decoding.
Non tutto l'URL va encodato — solo le parti che possono contenere caratteri riservati o non ASCII. Schema e dominio (https://toolscove.com) non vanno mai encodati. Il path può contenere /, -, _, ~, lettere e cifre senza encoding; tutto il resto va encodato. I query parameter (dopo ?) sono la parte più soggetta — spazi, &, =, caratteri accentati, emoji vanno sempre encodati. Il fragment (dopo #) segue le stesse regole del path.
Sono due funzioni JavaScript con scopi diversi e non intercambiabili. encodeURI(url) è progettata per encodare un URL completo — preserva i caratteri strutturali come :, /, ?, &, =, # che definiscono la struttura dell'URL. Usala quando hai già l'URL completo e vuoi solo assicurarti che i caratteri non-ASCII siano correttamente encodati. encodeURIComponent(valore) è progettata per encodare un singolo valore da inserire in un parametro — trasforma anche &, =, +, /, ?. Usala sempre per encodare i valori dei query parameter individualmente prima di concatenarli. L'errore classico: usare encodeURI per un valore che contiene & — il carattere non viene encodato e rompe il parsing dei parametri.
In JavaScript: encodeURIComponent(valore) per singoli parametri, new URLSearchParams({chiave: valore}).toString() per costruire query string complesse (gestisce l'encoding automaticamente). In Python: urllib.parse.quote(valore, safe='') per singoli valori, urllib.parse.urlencode({'chiave': valore}) per query string. In PHP: urlencode($valore) per query string, rawurlencode($valore) per il path (usa %20 invece di +). In Java: URLEncoder.encode(valore, StandardCharsets.UTF_8). In curl: --data-urlencode "chiave=valore".
Double encoding: encodare un URL già encodato — %20 diventa %2520. Avviene quando si applica encoding a un intero URL invece che ai soli valori dei parametri. Verifica sempre cosa stai encodando. Usare + invece di %20: + rappresenta lo spazio solo nel formato application/x-www-form-urlencoded (form HTML), non nell'URL path — usare + nel path di un URL è un errore. Non encodare le emoji: le emoji nei URL vanno encodate in UTF-8 percent-encoded (😀 → %F0%9F%98%80) — i browser le mostrano decoded per leggibilità, ma il valore reale nell'URL è sempre encoded.
%20 è il percent-encoding corretto per lo spazio in qualsiasi parte dell'URL (RFC 3986). Il + rappresenta lo spazio solo nel formato application/x-www-form-urlencoded usato dai form HTML — i server che leggono i form lo interpretano come spazio. Negli URL generici usa sempre %20.
In JavaScript: decodeURIComponent(str) per singoli valori, decodeURI(url) per URL completi. In Python: urllib.parse.unquote(str). Con questo tool: incolla l'URL encoded nel campo di input e seleziona "Decode" — il risultato è il testo originale leggibile.
Nel path, / è un separatore strutturale — non va encodata. Se il valore di un parametro contiene una slash letterale che fa parte del dato (non del path), va encodata come %2F — altrimenti viene interpretata come separatore di path. Nei query parameter, usa sempre encodeURIComponent che la encoda correttamente.
Tecnicamente sì tramite IRI (Internationalized Resource Identifier), ma per compatibilità massima vanno encodati in percent-encoding UTF-8. I browser moderni mostrano gli URL con caratteri accentati nella barra indirizzi per leggibilità, ma trasmettono sempre la versione encodata.