zerouploads

URL Decoder

Turn percent-encoded text back into readable characters, and split a decoded URL into its query parameters.

  • Unlimited
  • No signup
  • Private
  • Works offline

URL ConverterPercent-encoding, either direction

154 characters18 sequences found

DecodedValid

https://zerouploads.com/search?q=image compressor&tags=free,no signup&lang=en-GB&utm_source=newsletter&ref=tools/index

118 charactersdecoded once · UTF-8

Query parameters

each value decoded on its own

5 query parameters, each value decoded on its own
ParameterValueCopy the value
qimage compressor
tagsfree,no signup
langen-GB
utm_sourcenewsletter
reftools/index
Decoder options
154 characters in / 118 out · 5 parameters · + reads as a space

How it works

  1. 01

    Paste the encoded text

    A whole URL or one parameter value. It stays in this tab.

  2. 02

    Read it back

    The panes update as you type. A bad sequence is pointed at, never guessed at.

  3. 03

    Check the parameters

    The query string is split into a table, and each value can be copied on its own.

Double-encoding, and how to spot it

Text that still has percent signs in it after one pass was encoded twice. %2520 is a percent sign that was itself escaped. It decodes to %20, and then to a space. This happens when a URL travels through two systems that each escape it to be safe.

Decode repeatedly is off by default, because it destroys text that really contains a percent sequence. The safe habit is one pass at a time until the output stops changing. The footer of the Decoded pane says how many passes ran. With the switch on, the tool stops after 10.

Accepts
Any percent-encoded text: whole URLs or single values.
Query split
Done before decoding, so an escaped & stays in its value.
Encoding
UTF-8 by default. Latin-1 is there for older systems.
Bad input
A stray % or a cut-off sequence is reported, not guessed.

Reading the parameter table

When the query string is readable in the input, the table splits it first and decodes each piece after. That order matters. A value can hold an escaped ampersand, and a splitter that decodes first turns it into a real one and cuts the value in half. When the whole URL was encoded, the separators only appear after one pass, so the table decodes once and then splits.

Repeated keys each get their own row, because servers disagree about which one wins. Each value is decoded on its own, so a parameter holding a whole encoded URL comes back readable in its row.

Frequently asked questions

Why does my text still have % signs after decoding?
It was encoded twice. The percent signs themselves got escaped at some point, so %2520 is a percent sign that became %20 and then a space. Decode once more and watch whether the output stops changing.
Does a plus mean a space?
In form data a plus means a space. In a path it means a real plus. Treat + as a space picks which reading applies, and the wrong choice changes your data without any warning.
Can it split the query string?
Yes. The table under the panes lists every key and value. Where the query string is readable, it splits first and decodes each piece after, which keeps an escaped & inside its own value.
Are repeated parameters kept?
Yes. A key that turns up twice gets two rows, because servers disagree about whether the first, the last, or all of them count.
What about pages that are not UTF-8?
Switch Character encoding to Latin-1. It reads every byte as one character, which often fixes the mangled letters an older system sends.
Why is repeat decoding off by default?
Because it destroys text that contains a real percent sequence. One pass at a time until the output settles is the safe habit, and the footer of the Decoded pane says how many passes ran.
Is my URL sent anywhere?
No. Decoding runs in the page. A link carrying a token or tracking data never leaves the tab you pasted it into.
Browse all developer tools