URL Decoder

Turn percent-encoded text back into readable characters: %20 becomes a space and %26 an ampersand. It uses the browser's decodeURIComponent.

Updated

Developer Tools● Free No upload Instant

Loading URL Decoder…

Your browser is preparing the tool. It runs 100% locally.

Quick answer

Paste percent-encoded text and the tool decodes it with the browser's decodeURIComponent, turning %20 back into a space, %2F into a slash and %C3%A9 into é. Watch for one thing: a plus sign stays a plus, because the plus-for-space rule applies only to HTML form data. Malformed codes, such as a lone percent sign, raise an error instead of a guess. Decoding happens on your device.

What the URL Decoder does

Paste a percent-encoded value, the kind you see in a URL or query string, and you get the readable original back. Each %-code becomes the character it stands for, and runs of UTF-8 %-codes are reassembled into accented letters, non-Latin scripts and emoji.

It reverses URL component encoding exactly. What encodeURIComponent turned into %-codes, decodeURIComponent turns back, so text that goes through the encoder and then this decoder comes out unchanged.

How it works

The tool runs your text through JavaScript's decodeURIComponent. It looks for a percent sign followed by two hex digits, replaces each such sequence with the byte it stands for, then reads runs of bytes as UTF-8 to rebuild multi-byte characters.

It leaves plus signs alone. In a URL a plus is a literal plus. Only HTML form submissions use a plus to mean a space, and decodeURIComponent doesn't follow that convention. If your text came from a submitted form, replace the plus signs with spaces before decoding.

Data source & conversion logic

  1. Read the encoded text. Take the percent-encoded string you pasted.
  2. Replace the percent codes. Turn each percent sign and its two hex digits into the byte it represents.
  3. Rebuild UTF-8 characters. Interpret runs of bytes as UTF-8 to restore accented and non-Latin characters.
  4. Report malformed input. If a percent sequence is invalid, show an error instead of guessing.

What it decodes

%20 → space %2F → slash %3D → equals %26 → ampersand %C3%A9 → é plus sign → stays a plus (not a space)
Worked example
a%2Fb%3Fc%3Dd → a/b?c=d

Only percent-codes are decoded. A plus is left unchanged, because it means a space only in HTML form data.

Privacy

A built-in browser function does the decoding, and the text you paste is never uploaded. You can decode URLs that carry private parameters without sending them anywhere.

Decoding reveals whatever was encoded, because percent-encoding isn't encryption. If a value still looks scrambled after decoding, it was encrypted or hashed separately. This tool only undoes the percent-encoding layer.

Technical details

MethoddecodeURIComponent (browser built-in)
Decodespercent-codes, including UTF-8 sequences
Plus signleft as a plus (not a space)
Invalid inputraises an error, does not guess
ReversesencodeURIComponent (the URL encoder)
Where it runsOn your device; pasted text stays there

Standards and references

  • Percent-decoding (RFC 3986): Reverses the URL standard's percent-encoding, turning each percent sign and its two hex digits back into a byte. Runs of UTF-8 bytes become the original characters.
  • decodeURIComponent: The JavaScript function this tool uses. It decodes percent-codes and leaves a plus sign as a plus.
  • Plus-for-space is form-only: The rule that a plus means a space belongs to the form-urlencoded format that HTML forms submit, not to URLs in general, so a general decoder leaves the plus alone.

Accuracy and limits

A plus sign isn't turned into a space. In query strings from HTML forms a plus means a space, but decodeURIComponent doesn't apply that rule. If your input came from a submitted form, replace each plus with a space first.

Malformed input raises an error. A lone percent sign, or a percent followed by anything other than two hex digits, is invalid, and the tool reports it instead of returning a wrong guess. Find the stray percent and fix it.

It only undoes percent-encoding. If the decoded text still looks like gibberish, it was probably also Base64-encoded, encrypted or hashed, and this tool doesn't touch those layers.

Decoding the same text twice can corrupt it. If a value was encoded once, decode it once, because a second pass can turn a legitimate %25 (an encoded percent sign) into a bare percent and misread what follows.

It expects UTF-8. Percent-codes for bytes from another character set may come out as the wrong characters, since modern URLs assume UTF-8.

Real-world uses

Reading URLs

Make a long, encoded query string human-readable.

Debugging requests

See the real values inside an encoded API call or redirect.

Log analysis

Decode percent-encoded parameters captured in server logs.

Recovering values

Pull a readable search term or path out of an encoded link.

When it fits, and when it doesn't

Good for

  • Reading percent-encoded URLs and parameters
  • Reversing encodeURIComponent output
  • Debugging encoded API requests
  • Recovering a value from an encoded link

Not the best choice for

  • Decoding a plus to a space automatically
  • Undoing Base64, encryption or hashing
  • Fixing a string with stray percent signs
  • Non-UTF-8 legacy encodings

If the text came from an HTML form where a plus means a space, replace each plus with a space and then decode. Text that looks like Base64 rather than percent-codes needs a Base64 decoder, and the URL encoder handles the opposite direction.

Frequently asked questions

What does URL decoding do?
It reverses percent-encoding, turning %-codes back into the characters they stand for. %20 becomes a space, %3D an equals sign, and UTF-8 sequences such as %C3%A9 become accented letters like é.
Why is my plus sign not becoming a space?
decodeURIComponent treats a plus as a literal plus. The plus-means-space rule only applies to HTML form submissions, so if your text came from a form, replace each plus with a space before decoding.
Why did I get an error?
The input has an invalid percent sequence, usually a lone percent sign or a percent not followed by two hex digits. The tool reports the error instead of guessing. Find the stray percent and fix or encode it.
Why is the result still unreadable?
This tool only removes the percent-encoding layer. If the text is still scrambled, it was probably also Base64-encoded, encrypted or hashed, and each of those needs its own tool to undo.
Is it the exact reverse of the URL encoder?
Yes. It undoes encodeURIComponent, so encoding a value and then decoding it here returns your original text unchanged.
Does it handle accented and non-English characters?
Yes. It reassembles runs of UTF-8 percent-codes into the original characters, so %C3%A9 becomes é and multi-code emoji are restored.
Can I decode a whole URL?
Yes, paste the whole encoded URL and read it. If it was originally encoded as a single component, the slashes and other separators will have been encoded too.
Is decoding the same as decryption?
No. Percent-encoding hides nothing, so decoding just restores readable characters. No security is being broken.
Should I decode more than once?
Only as many times as it was encoded. A value encoded once should be decoded once, because a second pass can turn an encoded percent sign (%25) into a bare percent and corrupt the rest.
What if the text has no percent codes?
Then there is nothing to decode and you get the same text back. The tool only changes valid percent sequences.
Is my text uploaded?
No. Your browser decodes the text itself, and nothing you paste leaves your device.
Why assume UTF-8?
Modern URLs encode non-ASCII characters as UTF-8 bytes, so the decoder interprets byte runs as UTF-8. Percent-codes from an older, different encoding may decode to the wrong characters.

References

The browser's decodeURIComponent decodes the percent-codes, including UTF-8 runs. It leaves a plus sign as a plus, since plus-for-space is a form-data rule, and a malformed percent sequence raises an error rather than producing a wrong guess.

PopularHot

JSON Formatter

Paste messy or minified JSON and get it back pretty-printed with 2-space indentation. The same step tells you whether the JSON is valid.

DeveloperOpen Tool

Base64 Decoder

Decode Base64 back to readable text in your browser, Unicode included, and get a plain error message when the input is broken.

DeveloperOpen Tool

URL Encoder

Percent-encode a value so it can sit safely inside a URL. Spaces, ampersands, slashes and other special characters become %-codes, using the browser's encodeURIComponent.

DeveloperOpen Tool
Popular

Base64 Encoder

Encode any text to standard Base64 in your browser, emoji and accented letters included.

DeveloperOpen Tool
Popular

Hash Generator

Get the MD5, SHA-1, SHA-256, SHA-384 and SHA-512 hashes of any text at once, updated as you type, with a plain note on which ones are still safe for security work.

DeveloperOpen Tool
Popular

UUID Generator

Generate up to 500 random version 4 UUIDs at once, the 128-bit identifiers used for database keys, from your browser's secure random generator.

DeveloperOpen Tool

Back to the URL Decoder

Paste or pick your input at the top of the page. The conversion runs on this device and needs no account.