Che tu stia sviluppando un'applicazione web o semplicemente navigando su internet, ti sarai sicuramente imbattuto in strani simboli come %20 o %3F all'interno della barra degli indirizzi del browser. Questo fenomeno non è un errore, ma il risultato di un processo fondamentale chiamato URL Encoding (o Percent-encoding). Senza di esso, la comunicazione tra client e server tramite protocollo HTTP sarebbe soggetta a errori continui e vulnerabilità di sicurezza.
Perché i link hanno bisogno di essere codificati?
Secondo lo standard RFC 3986, gli indirizzi URL possono contenere solo un set limitato di caratteri appartenenti alla codifica ASCII. Questo serve a garantire che ogni computer, indipendentemente dal sistema operativo o dalla lingua, possa interpretare correttamente un indirizzo web.
I caratteri si dividono in due categorie principali:
- Caratteri non riservati — Possono essere usati liberamente: lettere (
A–Z,a–z), numeri (0–9) e i simboli- _ . ~. - Caratteri riservati — Hanno un significato strutturale specifico (come
/per le cartelle o?per le query):: / ? # [ ] @ ! $ & ' ( ) * + , ; =.
Qualsiasi altro carattere, inclusi gli spazi, le lettere accentate, le emoji o i caratteri non latini (come il cirillico o il cinese), deve essere trasformato prima di essere inserito in un URL. Se non lo facessi, il server potrebbe interpretare male la richiesta, causando errori 404 o malfunzionamenti dell'applicazione.
Come funziona il Percent-Encoding?
L'URL encoding sostituisce ogni carattere non consentito con un segno di percentuale (%) seguito dalla rappresentazione esadecimale a due cifre del valore del carattere secondo la codifica UTF-8.
Spazio → %20 (o + nelle query string) ! → %21 " → %22 # → %23 $ → %24 % → %25 & → %26 ' → %27 ( → %28 ) → %29 + → %2B / → %2F : → %3A = → %3D ? → %3F @ → %40
Prendiamo un esempio pratico: se devi inviare una stringa come pizze & birre attraverso un parametro di ricerca, il simbolo & verrebbe interpretato come un separatore di parametri. Grazie all'encoding, la stringa diventa pizze%20%26%20birre, permettendo al server di ricevere esattamente ciò che l'utente ha digitato.
Differenza tra urlencode e rawurlencode
Se lavori con linguaggi come PHP, noterai due funzioni principali. La differenza è sottile ma cruciale:
- urlencode() — Segue lo standard delle form HTML (application/x-www-form-urlencoded). Codifica gli spazi come un segno più (
+). - rawurlencode() — Segue lo standard RFC 3986. Codifica gli spazi come
%20. Questa è generalmente la scelta migliore per le moderne API RESTful.
Quando è obbligatorio usare l'URL Encoding?
Anche se i browser moderni cercano di codificare gli indirizzi automaticamente quando incolli un link, come sviluppatore devi gestire l'encoding manualmente in diversi scenari:
- Costruzione di query parameters: Quando concateni input provenienti dagli utenti (come stringhe di ricerca) all'interno di un URL.
- URL di reindirizzamento: Se passi un intero indirizzo come valore di un parametro (es.
?return_to=https://sito.it/pag), l'intero URL interno deve essere codificato. - Integrazione con API: Molte API REST richiedono che i valori dei parametri siano correttamente "escaped" per evitare che i separatori (come
=o&) rompano la struttura della richiesta.
Esempi di Codifica in PHP e JavaScript
// Codifica per query string (spazio diventa +)
$query = urlencode("web design & SEO");
echo $query; // Output: web+design+%26+SEO
// Codifica rigida (spazio diventa %20)
$path = rawurlencode("cartella documenti");
echo $path; // Output: cartella%20documenti
// Per codificare un singolo valore di parametro
const param = encodeURIComponent("test & esempio!");
console.log(param); // Output: test%20%26%20esempio!
// Per codificare un intero URL (mantiene : / ? #)
const fullUrl = encodeURI("https://mio-sito.it/caffé");
console.log(fullUrl); // Output: https://mio-sito.it/caff%C3%A9
Errori comuni da evitare
- Double Encoding: Codificare una stringa già codificata. Questo trasforma il simbolo
%in%25, rendendo l'URL illeggibile (es.%2520invece di%20). - Codificare l'intero URL: Non usare mai
encodeURIComponentsull'intero indirizzo, altrimenti i simbolihttps://verranno distrutti e il link non funzionerà. - Dimenticare i caratteri speciali: Caratteri come
+possono essere interpretati come spazi in alcuni contesti. Assicurati di codificarli sempre se fanno parte del contenuto dei dati.
Come decodificare un URL
Il processo inverso è altrettanto semplice. La decodifica ripristina i caratteri originali: %20 torna a essere uno spazio, %26 torna &. I server web gestiscono questa operazione automaticamente per i parametri ricevuti, ma in codice puoi usare urldecode() in PHP o decodeURIComponent() in JS.
Se hai bisogno di convertire velocemente una stringa senza scrivere codice, puoi utilizzare il nostro strumento di Decodifica URL gratuito, oppure generare un link sicuro con l' URL Encoder.
Prova i nostri Strumenti URL gratuiti
Codifica o decodifica qualsiasi stringa istantaneamente. Semplice, veloce e senza limiti.