ToolHub
View All Posts

Codifica URL Spiegata: Cos'è la Codifica Percentuale

Ogni volta che clicchi un link, invii un modulo o digiti un indirizzo web, il tuo browser gestisce la codifica URL dietro le quinte. Quelle stringhe di segni percentuali e cifre esadecimali negli URL non sono casuali; sono un meccanismo attentamente progettato che fa funzionare Internet in modo affidabile. Comprendere la codifica URL è essenziale per sviluppatori web, progettisti di API e chiunque lavori con la tecnologia web.

Cos'è la Codifica URL?

La codifica URL, formalmente nota come codifica percentuale, è un meccanismo definito in RFC 3986 che converte i caratteri in un formato sicuro per la trasmissione negli URI. La specifica URL consente solo a un sottoinsieme di caratteri ASCII di apparire direttamente in un URL. Qualsiasi carattere non in questo insieme deve essere codificato come un segno percentuale (%) seguito da due cifre esadecimali.

< diventa %3C (60 = 3C in esadecimale).

Perché la Codifica URL è Necessaria

Gli URL usano certi caratteri come delimitatori: ? separa il percorso dalla query, & separa i parametri, = separa nome e valore, / separa i segmenti del percorso. Se questi caratteri appaiono nei dati, verrebbero interpretati erroneamente.

Considera una ricerca di "rock & roll": l'URL sarebbe /search?q=rock & roll. Il browser interpreterebbe & come separatore, dividendo la query. La codifica URL risolve: /search?q=rock%20%26%20roll.

Come Funziona la Codifica Percentuale

Il processo di codifica: caratteri non riservati (A-Z, a-z, 0-9, -, ., _, ~) non hanno bisogno di codifica. Caratteri riservati (:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =) devono essere codificati quando usati come dati. Tutto il resto deve essere codificato in percentuale.

  1. Usare la funzione di codifica sbagliata: encodeURI per i valori dei parametri lascia & e = non codificati.
  2. Doppia codifica: se il framework già codifica, codificare manualmente di nuovo porta a valori doppiamente codificati.
  3. Non decodificare lato server: la maggior parte dei framework decodifica automaticamente, ma se gestisci l'URL grezzo, devi decodificare.

Il Processo di Codifica per Caratteri Non-ASCII

I caratteri non-ASCII richiedono un passaggio aggiuntivo: prima il carattere viene convertito in sequenza di byte UTF-8, poi ogni byte viene codificato in percentuale. Il simbolo dell'euro (€) ha la sequenza UTF-8 E2 82 AC, diventando %E2%82%AC. Il carattere accentato "è" ha la sequenza UTF-8 C3 A8, diventando %C3%A8.

La codifica URL e la codifica entità HTML sono spesso confuse ma hanno scopi completamente diversi. La codifica URL converte i caratteri nel formato %XX per una trasmissione sicura negli URL (governata da RFC 3986). La codifica HTML converte i caratteri in riferimenti entità come &, < e > per un rendering sicuro nei documenti HTML.

Caratteri Codificati Comuni

In pratica, spesso hai bisogno di entrambe. Quando incorpori un URL in HTML, l'URL ha bisogno di codifica URL e se il valore dell'attributo contiene caratteri come & o ", l'intero valore potrebbe aver bisogno di codifica HTML.

CarattereCodificaCodice ASCIIMotivo
Spazio%2032 (0x20)Non consentito
!%2133 (0x21)Riservato
#%2335 (0x23)Riservato (frammento)
$%2436 (0x24)Riservato
&%2638 (0x26)Riservato (query)
'%2739 (0x27)Riservato
(%2840 (0x28)Riservato
)%2941 (0x29)Riservato
+%2B43 (0x2B)Riservato
,%2C44 (0x2C)Riservato
/%2F47 (0x2F)Riservato (percorso)
:%3A58 (0x3A)Riservato (protocollo)
;%3B59 (0x3B)Riservato
=%3D61 (0x3D)Riservato (valore)
?%3F63 (0x3F)Riservato (query)
@%4064 (0x40)Riservato (autorità)
[%5B91 (0x5B)Riservato (IPv6)
]%5D93 (0x5D)Riservato (IPv6)

Codifica URL vs Codifica HTML

JavaScript fornisce tre funzioni: encodeURI (preserva i caratteri di struttura URL), encodeURIComponent (codifica tutto, incluso &, =, ?, /), e escape (obsoleto, non usare). Usa encodeURI per URL completi, encodeURIComponent per singoli valori di parametro.

Codifica URL

Python: urllib.parse.quote() per codifica, urllib.parse.quote_plus() che codifica gli spazi come +. PHP: urlencode() per stringhe di query (spazi come +), rawurlencode() per percorsi (spazi come %20).

Codifica HTML

Il carattere spazio ha due codifiche: %20 (standard RFC 3986, corretta per i componenti del percorso URL) e + (definita da application/x-www-form-urlencoded per i dati dei moduli nelle stringhe di query).

Differenze Chiave

AspettoCodifica URLCodifica HTML
URL e URI%XX (percentuale + esadecimale)<: %3C
Documenti HTML&nome; o &#NNN;<
Example for < %3C&lt;
Example for & %26 &amp;
Example for " %22 &quot;
Purpose Safe URL transmission Prevent HTML injection
Specification RFC 3986 HTML Living Standard

La doppia codifica si verifica quando i dati vengono codificati in URL più volte. Un attaccante potrebbe inviare %2527, che dopo la prima decodifica diventa %27, e dopo la seconda diventa una virgoletta singola '. Questo può bypassare la convalida dell'input, i filtri XSS e le protezioni SQL injection.

Codifica URL in Diversi Linguaggi

La codifica URL non è crittografia. È reversibile; chiunque può decodificare una stringa con codifica percentuale. Non usare mai la codifica URL come sostituto della crittografia o del controllo degli accessi. Dati sensibili non dovrebbero mai apparire negli URL.

JavaScript

Alcune applicazioni usano parametri di reindirizzamento con codifica URL. Convalida sempre i valori URL decodificati contro una whitelist di domini consentiti.

// encodeURI - encodes a complete URL
// Preserves: :, /, ?, #, &, =, +, @, ;, ,, !, ~, *, ', (, )
const url = encodeURI("https://example.com/search?q=hello world");
// Result: "https://example.com/search?q=hello%20world"

// encodeURIComponent - encodes a URL component
// Encodes ALL special characters including URL delimiters
const param = encodeURIComponent("price=100&discount=20");
// Result: "price%3D100%26discount%3D20"

// Never use escape() - it is deprecated
// It does not handle Unicode correctly

La codifica URL può mascherare sequenze di attraversamento del percorso. I server web devono decodificare e normalizzare i percorsi prima di controllare gli attacchi di attraversamento.

Python

from urllib.parse import quote, quote_plus, urlencode

# quote - standard URL encoding (spaces as %20)
encoded = quote("hello world&more")
# Result: "hello%20world%26more"

# quote_plus - spaces become + instead of %20
encoded_plus = quote_plus("hello world")
# Result: "hello+world"

# urlencode - encodes a dictionary as a query string
params = {"q": "hello world", "lang": "en"}
query = urlencode(params)
# Result: "q=hello+world&lang=en"

PHP

// urlencode - spaces become +
$encoded = urlencode("hello world&more");
// Result: "hello+world%26more"

// rawurlencode - RFC 3986 compliant (spaces as %20)
$raw = rawurlencode("hello world&more");
// Result: "hello%20world%26more"

Il Carattere Spazio: %20 vs +

Quando costruisci URL con parametri di query dinamici, codifica sempre i valori. I segmenti di percorso con caratteri speciali hanno bisogno di codifica, ma non codificare i delimitatori di percorso.

Hai bisogno di codificare o decodificare rapidamente un URL? Prova il nostro strumento gratuito di codifica e decodifica URL online.

Implicazioni di Sicurezza

La codifica URL (codifica percentuale) converte i caratteri in un formato sicuro per la trasmissione negli URL. Sostituisce i caratteri non sicuri con un segno percentuale seguito da due cifre esadecimali.

Attacchi di Doppia Codifica

%20 è la rappresentazione con codifica URL del carattere spazio. Gli spazi non sono consentiti negli URL perché creerebbero ambiguità.

La codifica URL converte in formato %XX per la trasmissione negli URL. La codifica HTML converte in riferimenti entità per la visualizzazione nei documenti HTML. Hanno scopi diversi.

La Codifica URL Non è Crittografia

Usa encodeURI per URL completi (preserva :, /, ?, &, =). Usa encodeURIComponent per singoli valori di parametro (codifica tutti i caratteri speciali).

Vulnerabilità di Reindirizzamento Aperto

La codifica URL di per sé non è una misura di sicurezza. È un meccanismo di trasporto. Convalida e sanifica sempre l'input lato server.

Attraversamento del Percorso

../../etc/passwd%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64. Web servers must decode and normalize paths before checking for traversal attacks.

Esempi Pratici

Codifica dei Parametri di Query

When building URLs with dynamic query parameters, always encode the values:

const baseUrl = "https://api.example.com/search";
const query = "user input with special chars: & ? = #";
const url = `${baseUrl}?q=${encodeURIComponent(query)}`;
// Result: "https://api.example.com/search?q=user%20input%20with%20special%20chars%3A%20%26%20%3F%20%3D%20%23"

Codifica dei Percorsi URL

Path segments that contain special characters need encoding, but you must not encode the path separators:

const category = "electronics & gadgets";
const product = "USB-C cable (6ft)";
const url = `/products/${encodeURIComponent(category)}/${encodeURIComponent(product)}`;
// Result: "/products/electronics%20%26%20gadgets/USB-C%20cable%20(6ft)"

Decodifica dei Componenti URL

const encoded = "hello%20world%3F%26%3D%23";
const decoded = decodeURIComponent(encoded);
// Result: "hello world?&=#"

Insidie Comuni

Migliore pratica di sicurezza: codifica sempre i dati per il corretto contesto di output. Usa la codifica URL per gli URL, la codifica HTML per il contenuto HTML, la codifica JavaScript per i contesti JavaScript e la codifica CSS per gli attributi di stile.

Need to encode or decode URLs quickly? Try our free online URL encoder and decoder tools.

Codifica URLDecodifica URL

Domande Frequenti

Cos'è la Codifica URL?

URL encoding, also called percent-encoding, is a mechanism that converts characters into a format that can be safely transmitted in a URL. It replaces unsafe or reserved characters with a percent sign followed by two hexadecimal digits representing the character's byte value. For example, a space becomes %20 and a question mark becomes %3F.

Perché Alcuni URL Contengono %20?

%20 is the URL-encoded representation of a space character. Spaces are not allowed in URLs because they can be ambiguous and break URL parsing. The percent sign followed by 20 represents the hexadecimal value 0x20, which is the ASCII code for a space. Some systems also use + for spaces in query strings, but %20 is the standard encoding.

Differenza tra Codifica URL e Codifica HTML?

URL encoding converts characters to percent-encoded format (%XX) for safe transmission in URLs. HTML encoding converts characters to entity references (&, <, etc.) for safe display in HTML documents. They serve different purposes: URL encoding is for URLs, HTML encoding is for HTML content. A value like < needs both: %3C in a URL and &lt; in HTML.

Quando Usare encodeURIComponent vs encodeURI?

Use encodeURI when encoding a complete URL, as it preserves URL structure characters like :, /, ?, &, and =. Use encodeURIComponent when encoding a single URL component value (like a query parameter), as it encodes ALL special characters including those that have structural meaning in URLs. Always use encodeURIComponent for query parameter values.

La Codifica URL Può Essere Usata per Scopi di Sicurezza?

URL encoding alone is not a security measure. It is a transport mechanism, not encryption or authentication. In fact, double encoding attacks can bypass security filters by encoding malicious input multiple times. Always validate and sanitize input on the server side, use parameterized queries for databases, and apply proper output encoding for the target context (HTML, URL, JavaScript).