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.

Esempi Comuni di Codifica
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:

  1. Costruzione di query parameters: Quando concateni input provenienti dagli utenti (come stringhe di ricerca) all'interno di un URL.
  2. 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.
  3. 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

Esempio in PHP
// 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
Esempio in JavaScript
// 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. %2520 invece di %20).
  • Codificare l'intero URL: Non usare mai encodeURIComponent sull'intero indirizzo, altrimenti i simboli https:// 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.