La guida completa alla codifica degli URL
Scopri tutto sulla codifica degli URL: cos'è, perché è importante, come funziona la codifica percentuale e le best practice per gestire i caratteri speciali negli URL.
Cos'è la codifica degli URL?
La codifica degli URL, nota anche come codifica percentuale (percent-encoding), è un meccanismo per codificare informazioni all'interno di un Uniform Resource Identifier (URI) in determinate circostanze. Sebbene sia conosciuta come codifica degli URL, viene utilizzata più in generale nell'intero insieme degli Uniform Resource Identifier (URI), che comprende sia gli Uniform Resource Locator (URL) sia gli Uniform Resource Name (URN).
La codifica è necessaria perché gli URL possono essere trasmessi su Internet solo utilizzando il set di caratteri ASCII. Poiché gli URL contengono spesso caratteri esterni al set ASCII, l'URL deve essere convertito in un formato ASCII valido. La codifica degli URL sostituisce i caratteri ASCII non sicuri con un % seguito da due cifre esadecimali.
Come funziona la codifica percentuale?
Il meccanismo della codifica percentuale funziona convertendo ogni carattere che deve essere codificato in uno o più byte. Ciascun byte viene poi rappresentato da un segno di percentuale seguito da due cifre esadecimali. Le cifre esadecimali rappresentano il valore del byte del carattere nella codifica specificata (in genere UTF-8).
Ad esempio, il carattere spazio (valore ASCII 32, esadecimale 20) diventa %20. La e commerciale & (valore ASCII 38, esadecimale 26) diventa %26. I caratteri non ASCII come la e con accento acuto vengono prima codificati nella loro sequenza di byte UTF-8, dopodiché ogni byte viene sottoposto a codifica percentuale.
Caratteri riservati e non riservati
L'RFC 3986 definisce due categorie di caratteri per gli URI: riservati e non riservati. I caratteri non riservati includono le lettere maiuscole e minuscole (A-Z, a-z), le cifre (0-9), i trattini (-), i punti (.), i trattini bassi (_) e le tilde (~). Questi caratteri possono essere inclusi in un URI senza codifica.
I caratteri riservati hanno significati speciali nella sintassi degli URL. Tra questi figurano: :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ; ed =. Quando questi caratteri vengono utilizzati in un componente di un URI al di fuori del loro scopo riservato, devono essere sottoposti a codifica percentuale.
La codifica degli URL nei diversi linguaggi
JavaScript
JavaScript fornisce due coppie di funzioni per la codifica degli URL: encodeURI() / decodeURI() per codificare URI completi, e encodeURIComponent() / decodeURIComponent() per codificare singoli componenti di un URI. La differenza fondamentale è che encodeURI() conserva i caratteri riservati che hanno un significato speciale negli URI (come /, ?, #), mentre encodeURIComponent() codifica tutti i caratteri non alfanumerici.
Python
Il modulo urllib.parse di Python mette a disposizione quote() e unquote() per la codifica/decodifica di base, oltre a urlencode() per codificare dizionari in query string. La funzione quote() accetta un parametro opzionale safe per specificare i caratteri che non devono essere codificati.
PHP
PHP offre urlencode(), che codifica gli spazi come + (seguendo il formato application/x-www-form-urlencoded), e rawurlencode(), che codifica gli spazi come %20 (seguendo l'RFC 3986). Per la decodifica, si utilizzano rispettivamente urldecode() e rawurldecode().
Best practice
- Codifica sempre l'input dell'utente prima di includerlo negli URL
- Utilizza
encodeURIComponent()per codificare i valori dei parametri di query in JavaScript - Utilizza
encodeURI()solo quando codifichi un URI completo - Mantieni un approccio coerente alla codifica in tutta l'applicazione
- Decodifica sempre gli URL lato server prima di elaborarli
- Testa la codifica con caratteri speciali, incluso Unicode
- Non applicare una doppia codifica agli URL -- verifica sempre se una stringa è già codificata