URL Decoder

URL Decoder

Decode any percent-encoded URL or string back to plain text instantly in your browser. Follows RFC 3986. Free, no sign-up required.

Updated May 2026

Shift + Enter to Copy · Shift + for tabs
Encoded URL
0 characters
Decoded Result
Speed
Instant
Privacy
Local Only

How the URL decoder works

Three steps from percent-encoded to readable

1. Paste the encoded string

A full URL, a query string fragment, or any percent-encoded value.

2. Read the decoded result

Every `%XX` sequence turns back into its original character, multi-byte UTF-8 sequences are reassembled, and `+` becomes a space.

3. Copy it

Click Copy or press Shift+Enter to grab the decoded string.

What this URL decoder does

More than a bare decodeURIComponent() call

Handles `%XX` and `+`

Decodes percent-encoded sequences and also converts + back to a space, the way application/x-www-form-urlencoded bodies use it.

Reassembles multi-byte UTF-8

Accented letters, CJK characters, and emoji made of several %XX bytes come back as a single, correct Unicode character.

Flags malformed sequences

A % not followed by two valid hex digits throws a clear error instead of silently returning garbled text.

Runs entirely in your browser

Decoding happens locally via decodeURIComponent() — nothing is sent to any server.

Examples

Common percent-encoded strings and what they decode to

Encoded input
Decoded output
hello%20world
hello world
%E2%82%AC100
€100
caf%C3%A9
café
search%3Fq%3Dhello%26lang%3Den
search?q=hello&lang=en
already%2520encoded
already%20encoded — double-encoded, decode again

When you'll reach for a URL decoder

The scenarios that come up most often

Debugging an API response

Headers like Location or Referer routinely arrive percent-encoded and unreadable as-is.

Reading raw server logs

Query strings in access logs turn from %3F noise into an actual sentence once decoded.

Inspecting a redirect chain

A redirect URL embedded inside another URL is almost always double-encoded — decode twice to see the real destination.

Working through an OAuth flow

Authorization codes and tokens show up percent-encoded in callback URLs — you need them plain to copy into a request.

Security review of HTTP requests

Encoded payloads in request parameters can hide injection attempts that are only obvious once decoded.

Decoded output looks wrong? Start here

The mistakes that trip people up most

Double encoding

A string encoded twice needs two passes through the decoder — the first pass still leaves %XX sequences in the result.

`+` isn't always a space

It only means space inside application/x-www-form-urlencoded query strings — in a path segment, a literal + is just a plus sign.

Malformed `%` sequence

A % not followed by two valid hexadecimal digits is invalid and will produce an error rather than a guessed result.

Why decode a URL here

Every decode happens locally in JavaScript, right in your browser — nothing is uploaded, nothing is logged.

Correct multi-byte UTF-8 reassembly and proper handling of + as a space in query strings sidestep the two mistakes people run into most when they try to decode a URL by hand.

Quick Tools vs. the browser console

Same underlying function, a much faster workflow

Quick Tools
decodeURIComponent() in DevTools
Flags double encoding
yes
manual
Treats + as a space
yes
no
Shows a clear error for invalid sequences
yes
generic exception
Nothing leaves your machine
yes
yes
No DevTools required
yes
no

Frequently asked questions

URL decoding converts percent-encoded %XX sequences back to characters, following RFC 3986. Base64 decoding converts a string made of A–Z a–z 0–9 + / characters back into its original bytes — they're unrelated formats. If your string looks like aGVsbG8=, use a [Base64 decoder](/en/tools/base64-decode) instead.

References

Related Tools