Come usare il codificatore e decodificatore di URL
- Scegli Codifica oppure Decodifica.
- Scegli una modalità: componente per un singolo valore di query o segmento di percorso, oppure URL completo per mantenere intatta la struttura dell'URL (
:,/,?,&). - Incolla il testo o l'URL e copia il risultato.
Tutto viene elaborato nel tuo browser. Gli URL spesso contengono token e dati personali nelle query string, ma nulla di tutto ciò viene caricato né memorizzato.
Che cos'è la codifica percentuale?
Gli URL possono contenere solo un insieme limitato di caratteri ASCII. La codifica percentuale (percent-encoding), definita nella RFC 3986, rappresenta ogni altro byte come un segno di percentuale seguito da due cifre esadecimali. Il testo viene prima convertito in byte UTF-8, poi ogni byte che va codificato viene scritto come %XX:
café & crème → caf%C3%A9%20%26%20cr%C3%A8me
Qui é corrisponde a due byte UTF-8 (C3 A9), lo spazio diventa %20 e la e commerciale diventa %26.
Caratteri riservati e non riservati
| Gruppo | Caratteri | Significato |
|---|---|---|
| Non riservati | A–Z a–z 0–9 - . _ ~ | Non hanno mai bisogno di codifica. |
| Riservati: gen-delims | : / ? # [ ] @ | Separano le parti principali di un URL. |
| Riservati: sub-delims | ! $ & ' ( ) * + , ; = | Delimitano i dati all'interno di una parte, come & e = nelle query string. |
I caratteri riservati vanno codificati quando compaiono come dati e non come delimitatori. Una ricerca di R&D deve essere inviata come q=R%26D; altrimenti il server vede un secondo parametro chiamato D.
encodeURIComponent o encodeURI
JavaScript offre due funzioni e scegliere quella sbagliata è una fonte frequente di bug:
encodeURIComponent()codifica tutto tranneA–Z a–z 0–9 - _ . ! ~ * ' ( ). Usala per i singoli valori: parametri di query, segmenti di percorso, dati del frammento.encodeURI()in più lascia intatti; , / ? : @ & = + $ #, quindi si può applicare a un URL completo senza rovinarne la struttura. Non protegge un valore che contiene&o#.
encodeURI("https://example.com/a b?q=R&D")
// "https://example.com/a%20b?q=R&D" (& lasciato invariato)
"https://example.com/search?q=" + encodeURIComponent("R&D")
// "https://example.com/search?q=R%26D"
Meglio ancora, lascia che sia URLSearchParams o la libreria URL del tuo linguaggio a costruire le query string per te.
Trappole comuni
+ o %20
I moduli HTML inviati come application/x-www-form-urlencoded codificano uno spazio come +. Negli URL secondo la RFC 3986, + è un segno più letterale e lo spazio è %20. Un decodificatore che non sa quale convenzione sia stata usata può trasformare C++ in C oppure lasciare + al posto degli spazi. Per sicurezza, codifica un vero segno più come %2B.
Python: urllib.parse.quote("a b&c") → a%20b%26c
urllib.parse.quote_plus("a b&c") → a+b%26c
Doppia codifica
Codificare una stringa già codificata codifica a loro volta i segni di percentuale: %20 diventa %2520. Di solito succede quando un valore viene codificato dal tuo codice e poi di nuovo da un framework o da un client HTTP. Se in un URL vedi %25, sospetta una doppia codifica. Decodificare due volte è altrettanto dannoso: può trasformare un %41 letterale nei dati dell'utente in A.
Codificare l'intero URL come componente
Eseguire encodeURIComponent su un URL completo codifica :// e ogni /, producendo https%3A%2F%2F.... Questo è corretto solo quando l'URL è a sua volta il valore di un parametro, come un redirect_uri.
Consigli
- Le cifre esadecimali nelle codifiche percentuali non distinguono maiuscole e minuscole, ma la RFC 3986 raccomanda il maiuscolo (
%2F, non%2f). - I nomi di dominio internazionalizzati non usano la codifica percentuale; usano invece Punycode (
xn--). - Devi trasportare dati binari in un URL? Il Base64 URL-safe è più compatto della codifica percentuale di ogni byte.
- Controlla come un server gestisce la tua richiesta codificata con la verifica header HTTP.
Domande frequenti
Perché a volte uno spazio è + e a volte %20?
+ deriva dalla codifica dei moduli HTML usata nelle query string e nei corpi POST; %20 è la codifica generale della RFC 3986, valida ovunque in un URL. In caso di dubbio, usa %20.
Quali caratteri non hanno mai bisogno di codifica?
L'insieme dei non riservati: lettere, cifre, trattino, punto, trattino basso e tilde. Tutto il resto andrebbe codificato quando fa parte di un valore.
La codifica degli URL è una misura di sicurezza?
No. Rende i dati solo sintatticamente sicuri all'interno di un URL ed è completamente reversibile. Da sola non nasconde i dati né previene le injection.
Come decodifico un URL con sequenze %uXXXX?
%uXXXX è un formato non standard prodotto dalla funzione JavaScript escape(), ormai deprecata. I decodificatori standard lo rifiutano; va convertito separatamente.
Aggiornato