Codifica URL: codifica in percentuale parametri di query e percorsi

La codifica in percentuale sostituisce i caratteri non sicuri con %XX così che qualsiasi testo sia sicuro all’interno di una URL. Sappi quali caratteri escapare e come decodificarli.

Cos’è la codifica percentuale

I caratteri non ammessi in una URL vengono sostituiti da un segno di percentuale e due cifre esadecimali. Uno spazio diventa %20 e l’ampersand diventa %26.

encodeURIComponent vs encodeURI

Usa encodeURIComponent per un singolo valore di query o per un segmento di path — fa l’escape di /, ?, & e =. Usa encodeURI solo sull’URL intera, dove quei caratteri sono strutturali e devono sopravvivere.

La trappola + vs %20

Nelle query string uno spazio può apparire come + (form encoding) o come %20. decodeURIComponent non trasforma + in spazio: sostituisci i + prima di decodificare dati form-encoded.

Doppia codifica

Codificare una stringa già codificata trasforma %20 in %2520. Se vedi sequenze %25 in output, il valore è stato codificato due volte — decodifica ripetutamente finché smette di cambiare.

Caratteri riservati e non riservati

La RFC 3986 divide i caratteri di URL in riservati (gen-delims come : / ? # e sub-delims come & =) e non riservati (lettere, cifre, - . _ ~). I non riservati non vanno mai codificati. I riservati vanno codificati solo quando appaiono dentro un valore, non come struttura dell’URL.

Codificare un’intera URL vs un singolo valore

encodeURI serve per URL intere: lascia : / ? # & = invariati per preservare la struttura. encodeURIComponent serve per un singolo valore destinato a un segmento di path o a un parametro — fa l’escape dei caratteri strutturali in modo che il valore non sfugga dal suo posto.

Costruire query string sicure da codice

Preferisci URLSearchParams (browser) o url.URLSearchParams (Node) alla concatenazione di stringhe. Entrambe le API codificano correttamente chiavi e valori, gestiscono parametri multi-valore ed evitano l’errore più comune — dimenticare di codificare un parametro che contiene proprio & o =.