Una parola come "città" o "perché" non può comparire così com'è in un URL: le vocali accentate italiane, insieme allo spazio e a simboli come & e ?, devono essere convertiti in percent-encoding prima di finire in un indirizzo.
Perché "città" si allunga così tanto una volta codificata
Ogni vocale accentata viene prima convertita in UTF-8 (2 byte) e poi ogni byte diventa %XX: la à di "città" diventa %C3%A0. Una parola breve come "città" supera facilmente i 10 caratteri codificati, e nei link di ricerca di un e-commerce italiano una query con più parole accentate — "perché", "società" — può facilmente raddoppiare di lunghezza rispetto all'equivalente senza accenti.
encodeURIComponent contro encodeURI
encodeURIComponent codifica quasi tutti i caratteri con significato strutturale — &, ?, =, / — quindi è adatto a un singolo valore, come un termine di ricerca inserito in ?q=. encodeURI lascia intatti questi caratteri strutturali perché serve a codificare un URL intero già costruito.
Un errore comune con i parametri
Se si codifica l'intera query string in un colpo solo con encodeURIComponent, anche i caratteri & e = che separano i parametri diventano %26 e %3D — il server riceve un unico parametro illeggibile invece di più valori distinti. Ogni valore va codificato separatamente.
Quando serve
- Inserire un termine di ricerca o un nome prodotto con accenti in un parametro.
- Costruire link con valori dinamici (ricerche, identificativi).
- Diagnosi: decodificare un URL per vedere quali dati contiene davvero.
Caso limite: doppia codifica
Se una stringa già codificata viene codificata una seconda volta, il carattere % stesso diventa %25, e il risultato è un testo doppiamente codificato e illeggibile (%C3%A0 diventa %25C3%25A0). Succede spesso quando un framework codifica già l'URL automaticamente e il codice richiama manualmente encodeURIComponent su un valore già codificato.