Decodifica URL
Incolla un URL codificato e leggi che cosa dice davvero, con i parametri elencati a parte.
Che cosa significa %20 in un URL?
%20 è uno spazio. In un URL ogni byte si può scrivere come percentuale seguita dal suo valore esadecimale a due cifre, e 20 in esadecimale fa 32, il codice del carattere spazio. Un decodificatore di URL riporta quelle sequenze ai caratteri che rappresentano.
Come funziona
Decodificare inverte il percent-encoding: ogni %XX torna a essere il byte XX, e i byte risultanti si leggono come UTF-8. %C3%A8 ridiventa è, %20 uno spazio.
Se l’URL ha una query string viene anche spezzato nei suoi parametri e mostrato come tabella, perché la domanda vera di solito non è «che cosa dice questa riga» ma «cosa c’è dentro utm_content».
Se il + valga uno spazio dipende da dove arriva la stringa: nel corpo di un form sì, altrove è un più letterale. Qui è una modalità e non un indovinello, perché indovinare corrompe i valori base64.
Che cosa fa un decodificatore di URL
Un URL codificato è illeggibile apposta: i caratteri che confonderebbero un parser sono stati sostituiti da sequenze %, e tutto quello che sta fuori dall’ASCII è diventato i suoi byte UTF-8. Un decodificatore annulla entrambi i passaggi, così https%3A%2F%2Fexample.com%2Fcaff%C3%A8 ridiventa https://example.com/caffè e si vede a cosa puntava davvero il link.
Conta soprattutto quando l’URL ne trasporta un altro. Parametri di redirect, callback OAuth, wrapper di tracciamento e flussi di consenso annidano un indirizzo dentro l’altro, a volte due volte, e l’unico modo di sapere dove porta un link è decodificarlo. Farlo in una pagina che gira sulla tua macchina è meglio che incollare una callback firmata nel server di uno sconosciuto.
Come si usa
- Incolla tutto l’URL oppure solo il pezzo che ti interessa. Funzionano entrambi: al decodificatore non serve un URL valido, serve una stringa.
- Leggi la tabella dei parametri quando c’è una query string, ogni parametro compare con il valore già decodificato. Di solito è la risposta per cui eri venuto.
- Scegli la modalità la modalità form legge il + come spazio: giusta per il corpo di un form inviato, sbagliata per tutto il resto.
- Decodifica due volte quando serve se il risultato contiene ancora sequenze %XX era codificato due volte. Rimandalo su e decodifica ancora.
- Rimanda su sposta il risultato nell’input: è così che si sbuccia un URL annidato uno strato alla volta.
I casi difficili
Una sequenza malformata ferma tutta la decodifica, ed è corretto più che scomodo. %zz non è un byte, e un decodificatore che lo saltasse restituirebbe una stringa silenziosamente diversa dall’originale. Lo strumento nomina invece la sequenza che si è rotta, e di solito basta per riconoscere dietro di essa un copia-incolla troncato.
Un % isolato è la versione più comune di quel problema. «sconto 100%» incollato in un campo URL non è codifica valida: il parser legge «% s» come una sequenza, non trova cifre esadecimali e si arrende. Si risolve codificando prima il valore: un segno di percentuale letterale è %25.
E una stringa decodificata non è una stringa sicura. Decodificando, %3Cscript%3E ridiventa un tag script: si annulla una codifica, non si sanifica niente. Quello che farai dopo con il risultato ha bisogno del suo escape, adatto a dove andrà a finire.
Quando l’uscita sembra sbagliata
- Il risultato contiene ancora %20 l’input era codificato due volte. Decodifica di nuovo: ogni passaggio toglie uno strato.
- Gli accenti escono come caratteri strani le sequenze sono byte Latin-1, non UTF-8. Un vecchio sistema ha codificato la è come %E8 invece di %C3%A8, e non c’è modo di leggerla come UTF-8.
- I più sono diventati spazi sei in modalità form su una stringa che non è il corpo di un form. Cambia modalità: conta per i valori base64, che contengono + legittimamente.
- Un errore di sequenza incompleta un % non seguito da due cifre esadecimali: di solito un segno di percentuale letterale mai codificato, o un URL tagliato nel copia-incolla.
- Manca un parametro controlla se sta dopo il #. Il frammento non fa parte della query string e al server non arriva mai.
Come si chiamano i pezzi di un URL
- Query string tutto quello che segue il ?, come coppie nome=valore unite da &. L’ordine non è significativo e i nomi ripetuti sono ammessi, ed è per questo che i server non sono d’accordo su cosa voglia dire ?a=1&a=2.
- Frammento tutto quello che segue il #. Resta nel browser: non viene mai inviato al server, quindi non compare in nessun log.
- Segmento di percorso le parti tra le barre. Una / dentro un valore va codificata, altrimenti diventa un segmento nuovo.
- Sequenza percentuale il % più due cifre esadecimali. Non distingue maiuscole e minuscole, quindi %C3%A8 e %c3%a8 si decodificano uguale.
- Parametri UTM utm_source, utm_medium, utm_campaign e compagnia: normalissimi parametri di query che gli strumenti di analytics si accordano a leggere. Per l’URL in sé non hanno nulla di speciale.
Domande frequenti
Come si decodifica un URL?
Si incolla. Ogni %XX torna a essere un byte e i byte si leggono come UTF-8, quindi %C3%A8 ridiventa è e %20 uno spazio.
Perché il testo decodificato contiene ancora %20?
Perché era codificato due volte. Ogni decodifica toglie uno strato: rimanda su il risultato e decodifica di nuovo.
Il + significa spazio?
Solo nel corpo di un form. Altrove il + è un più letterale, ed è il motivo per cui decodificarlo come spazio corromperebbe i valori base64.
Che vuol dire l’errore di sequenza incompleta?
Che c’è un % non seguito da due cifre esadecimali. Di solito è un segno di percentuale mai codificato, o un URL troncato nel copia-incolla.
Un URL decodificato è sicuro da usare?
Decodificare non è sanificare: restituisce senza problemi un tag script. Quello che farai dopo con il risultato ha bisogno del suo escape per la destinazione in cui finisce.