Codifica URL dei caratteri speciali: guida di riferimento per sviluppatori
Una guida di riferimento completa alla codifica URL dei caratteri speciali, inclusi spazi, e commerciali, caratteri Unicode e altro ancora.
Caratteri speciali negli URL
Gli URL seguono una sintassi rigorosa definita dall'RFC 3986. Molti caratteri hanno significati speciali o non sono ammessi in determinate parti di un URL. Capire come codificare correttamente questi caratteri è fondamentale per costruire applicazioni web e API affidabili.
Il carattere spazio
Lo spazio è il carattere codificato più di frequente. Tuttavia, può essere codificato in due modi a seconda del contesto:
%20- Codifica percentuale secondo l'RFC 3986, usata nei percorsi degli URL e nella maggior parte dei contesti+- Usato nel formatoapplication/x-www-form-urlencoded(invio dei form HTML)
Quando costruisci URL a livello di codice, preferisci %20 per coerenza. Quando componi i dati di un form, la notazione + è quella standard.
Approfondimento sui caratteri riservati
L'e commerciale (&)
L'e commerciale separa i parametri della query. Quando un'e commerciale compare nel valore di un parametro, deve essere codificata come %26 per evitare che venga interpretata come separatore. Nei contesti HTML deve inoltre essere codificata come entità, ovvero &.
Il punto interrogativo (?)
Il punto interrogativo separa il percorso dalla query string. Se un punto interrogativo compare nel valore di un parametro, deve essere codificato come %3F. Nota che encodeURI() NON codifica i punti interrogativi, mentre encodeURIComponent() lo fa.
Il cancelletto (#)
Il simbolo cancelletto introduce l'identificatore di frammento. Negli URL, qualsiasi # presente nel valore di un parametro della query deve essere codificato come %23, altrimenti il browser interpreterà tutto ciò che segue come identificatore di frammento e non lo invierà al server.
La barra (/)
Le barre separano i segmenti del percorso. Quando una barra compare nel valore di un segmento del percorso (ad esempio in un nome di file che contiene una barra), deve essere codificata come %2F. Nota che alcuni server potrebbero decodificare %2F e continuare comunque a trattarlo come separatore di percorso.
Caratteri Unicode
I caratteri non ASCII vengono codificati convertendoli prima nella loro sequenza di byte UTF-8 e applicando poi la codifica percentuale a ciascun byte. Ecco alcuni esempi:
- e latina con accento acuto (e) → UTF-8: 0xC3 0xA9 →
%C3%A9 - carattere cinese (zhong) → UTF-8: 0xE4 0xB8 0xAD →
%E4%B8%AD - emoji (globo) → UTF-8: 0xF0 0x9F 0x8C 0x8D →
%F0%9F%8C%8D
Codifica nei diversi componenti dell'URL
| Componente | Da codificare | Esempio |
|---|---|---|
| Segmento del percorso | Spazi, ?, # e caratteri non ASCII | /path/my%20file |
| Chiave della query | =, &, #, +, spazi | my%20key=value |
| Valore della query | &, #, +, spazi, = | key=hello%20world |
| Frammento | Spazi e caratteri non ASCII | #section%20one |
Errori comuni
- Dimenticare di codificare
#nei valori della query (il resto dell'URL viene scartato silenziosamente) - Codificare due volte stringhe già codificate (ottenendo
%2520invece di%20) - Usare
encodeURI()invece diencodeURIComponent()per i valori dei parametri - Non codificare
+nei valori della query (viene decodificato come uno spazio) - Dare per scontato che tutti i server gestiscano
%2Fallo stesso modo nei percorsi