Free URL Decoder

Paste a percent-encoded URL, query string or form value and the readable text appears below as you type: %20 becomes a space, %40 becomes @ and UTF-8 sequences such as %C3%A9 become รฉ. Put one URL per line to decode a batch. Decoding runs entirely in your browser; nothing you paste is sent anywhere.

Characters: 0 | Lines: 0Decodes as you type
Output: 0 characters

Quick Guide

  • โ€ข Decode + as space: turn it on for query strings and form data (application/x-www-form-urlencoded); turn it off when a + in the text is a real plus sign
  • โ€ข Double encoding: keeps decoding (up to 10 times) while %XX sequences remain, so %252520 ends as a space
  • โ€ข Batch decoding: enter one URL per line; every line is decoded
  • โ€ข Comparison view: shows each encoded line next to its decoded result
  • โ€ข Malformed input: a stray % or bytes that are not valid UTF-8 are left unchanged and flagged instead of failing the whole input

Common Examples

Encoded space (%20):

hello%20world โ†’ hello world

Form data (+ for space):

hello+world โ†’ hello world

Special characters:

name%3DJos%C3%A9%26city%3DS%C3%A3o%20Paulo โ†’ name=Josรฉ&city=Sรฃo Paulo

Double encoded:

hello%2520world โ†’ hello%20world โ†’ hello world

URL decoder: decode percent-encoded URLs, free and private

A URL decoder turns percent-encoded text such as hello%20world back into readable text. To decode a URL free and privately, paste it into Encoded URL or Text and read the result in Decoded Output, which updates as you type. The decoding runs in your browser and nothing you paste is uploaded; you can check that in the Network tab of DevTools.

The decoder converts every valid %XX sequence it finds, the way JavaScript's decodeURIComponent does, but leaves a malformed one such as a lone %FF as typed instead of failing. UTF-8 sequences become characters, so %C3%A9 turns into รฉ and %F0%9F%91%8B into ๐Ÿ‘‹. It does not read the URL's structure, so %2F, %3F, %26 and %3D become /, ?, & and = even where they were protecting a parameter value.

Two options cover the usual surprises: Decode + as space for query strings and form data, and Handle double encoding for text that was escaped twice. To go the other way, use the URL encoder. If your text has & where you expected a plain ampersand, you want the HTML entity decoder instead.

Table of Use: encoded input and decoded output

Example inputs, the setting used, and the text the decoder returns
You pasteSettingYou get
hello%20worldDefaulthello world
how+to+decode+urlsDefault (Decode + as space ticked)how to decode urls
a+bDecode + as space untickeda+b
1%2B1%3D2Default: an encoded plus stays a plus1+1=2
S%C3%A3o%20PauloDefault (UTF-8)Sรฃo Paulo
%F0%9F%91%8BDefault (UTF-8, four bytes)๐Ÿ‘‹
https%3A%2F%2Fexample.com%2Fpage%3Fid%3D123Defaulthttps://example.com/page?id=123
hello%2520worldDefault: one layer removedhello%20world
hello%2520worldHandle double encoding tickedhello world
100%Default: % without two hex digits100% (unchanged)
%FFDefault: not valid UTF-8%FF (unchanged, counted in a notice)

Query strings often carry a whole JSON document in one parameter. Decode it here, then tidy it with the JSON formatter or check it with the JSON validator. To see exactly what decoding changed in a long URL, put the before and after versions into the text diff tool.

Features

  • Decodes as you type. There is no Decode button; the output is recalculated on every change.
  • UTF-8 aware. Multi-byte sequences are reassembled into accented letters, Chinese, Arabic, Hindi and emoji.
  • Decode + as space. Ticked by default for query strings and form data. Untick it when a + is a real plus sign.
  • Handle double encoding. Repeats the decoding while codes that can still be decoded remain, up to 10 passes, and shows how many it used.
  • Tolerant of broken input. A stray % or bytes that are not valid UTF-8 stay as typed and are counted in a notice; the rest is decoded.
  • Batch decoding. One URL per line, with Show line-by-line comparison giving a Before/After table for the first 500 lines.
  • Copy, Download, Undo, Redo and Clear. Download saves a UTF-8 text file named decoded-url followed by a timestamp.
  • Counters. Characters and lines in, characters out, and how much shorter the result is. A single emoji such as ๐Ÿ‘‹ counts as one character; characters are counted by Unicode code point, so a flag or skin-tone emoji counts as more than one.

It decodes percent codes only. It does not fetch the URL, split it into host, path and query, or decode other encodings. For Base64 inside a parameter use the Base64 decoder, and for a pasted list of byte values use the ASCII to text converter.

How to decode a URL, step by step

  1. Paste the encoded text into Encoded URL or Text. It can be a full URL, a query string, a single value or several URLs, one per line.
  2. Read the result in Decoded Output. It updates immediately, and the line under the box says Decodes as you type.
  3. Keep Decode + as space ticked for query strings and form data. Untick it if a + in your text is a real plus sign.
  4. If the output still contains codes such as %20, tick Handle double encoding. A line under the input reports how many times the text was decoded.
  5. For a batch, click Show line-by-line comparison to read Encoded (Before) beside Decoded (After). Click Hide line-by-line comparison to return to the output box.
  6. Click Copy to put the result on your clipboard, Download to save it, or Clear to start over. Undo and Redo step back and forward through your recent inputs and option changes.

Who can use it

  • Web developers reading query parameters, redirect targets and API requests copied from the browser, then re-encoding a fixed value with the URL encoder.
  • SEO specialists and marketers making campaign links, search-term exports and log lines readable one URL per line, and turning a headline into a clean address with the slug generator.
  • QA testers and support teams comparing what a browser sent with what a server received.
  • Analysts and security reviewers unpacking encoded values in access logs, using the find and replace tool to clean up the results.
  • Students learning how percent-encoding works: the table above shows the rules at work, and the hex to binary converter turns a pair of hex digits such as C3 into the bits behind the byte.

FAQs

How do I decode a URL online?

Paste the encoded URL or text into the Encoded URL or Text box. The readable version appears in Decoded Output as you type, with each valid %XX code turned back into its character: %20 becomes a space and %3F becomes a question mark. Click Copy to put the result on your clipboard, or Download to save it as a text file.

What is the difference between %20 and + for a space?

Both can mean a space. %20 is the percent code for a space and works anywhere in a URL. A + means a space only in query strings and HTML form data; in a URL path it is a plain plus sign. Keep Decode + as space ticked for query strings and form data, and untick it when the plus signs are real. An encoded plus, %2B, always decodes to +.

Why does my decoded URL still show %20 or other percent codes?

The text was most likely encoded twice, so a space went from %20 to %2520 (the percent sign itself became %25). Tick Handle double encoding and the tool keeps decoding, up to 10 passes, until nothing more can be decoded, then tells you how many passes it needed. Leave it unticked if the codes are meant to stay.

Can I decode non-English characters and emoji?

Yes. Characters outside ASCII are written as several percent-encoded UTF-8 bytes: รฉ is %C3%A9, and the waving-hand emoji is %F0%9F%91%8B. The decoder reads those bytes back into the original character, so accented Latin letters, Chinese, Arabic, Hindi and emoji all come out correctly, with no setting to choose.

What happens to a broken code such as %ZZ or a lone %FF?

A % that is not followed by two hexadecimal digits, such as the end of 100% or the start of %ZZ, stays exactly as typed. Codes that are valid hex but not valid UTF-8, such as a lone %FF or a cut-off %C3, also stay as typed, and a notice counts them. The rest of the text is still decoded, so one bad code never blanks the output.

Can I decode a list of URLs at once?

Yes. Put one encoded URL on each line and every line is decoded, with the line breaks kept. Click Show line-by-line comparison to see Encoded (Before) next to Decoded (After) in a table. The table lists the first 500 non-empty lines, while the output box, Copy and Download always cover the whole input.

Is it safe to paste a URL with a token or personal data into this decoder?

Decoding runs in your browser, so the URL you paste is not uploaded, logged or stored by ZipConvert, and you can confirm it in the Network tab of your browser DevTools: no request carries your text. As with any web page, avoid pasting passwords or active tokens on a shared or untrusted computer.