Codifica e decodifica URL
Applica e rimuove la codifica percentuale negli URL, distinguendo un indirizzo intero da un singolo parametro.
Codifica/, ? e &:
serve per un valore da inserire in un parametro. Togli la spunta per codificare un URL intero.
Perché gli URL vanno codificati
Un indirizzo web può contenere solo un insieme ristretto di caratteri. Tutto
il resto — spazi, accenti, ideogrammi, emoji — va rappresentato con la codifica
percentuale: ogni byte diventa un segno di percentuale seguito da due cifre
esadecimali. Uno spazio diventa %20, una lettera accentata due
gruppi, perché in UTF-8 occupa due byte.
Indirizzo intero o singolo valore
È la distinzione che genera più errori. Alcuni caratteri, come
/, ?, & e =, negli URL
hanno un significato: separano il percorso, aprono la query, dividono i
parametri. Se stai codificando un indirizzo intero vanno lasciati
stare, altrimenti l'indirizzo si rompe. Se stai codificando un valore da
mettere dentro un parametro vanno codificati, altrimenti quel valore viene
letto come se fosse struttura.
L'errore classico
Un URL passato come parametro di un altro URL senza codificare la sua query:
tutto ciò che segue il primo & viene interpretato come parametro
dell'indirizzo esterno, e il valore arriva troncato. È il motivo per cui i
collegamenti di ritorno dopo un accesso a volte perdono metà del percorso.
Codifica non vuol dire protezione
La codifica percentuale serve a trasportare i caratteri, non a nasconderli né a rendere sicuro un valore. Un dato inserito in una pagina va comunque sanificato: codificarlo per l'URL non lo rende innocuo nell'HTML.
Domande frequenti
Quando stai codificando un indirizzo completo. Con la spunta vengono codificati anche /, ? e &, che in un indirizzo intero servono e non vanno toccati.
Il segno più appartiene alla codifica dei moduli HTML, non agli URL. Nel percorso di un indirizzo lo spazio è sempre %20; nella query entrambe le forme si incontrano, e i server di norma le accettano entrambe.
Di solito perché il testo contiene un segno di percentuale non seguito da due cifre esadecimali valide, spesso perché è già stato decodificato una volta.