21
2

URL Decode

Egor VolchenkoEgor Volchenko
CreatedNov 9, 2026
UpdatedNov 9, 2026

URL Decode converts percent-encoded bytes into readable UTF-8 text. Use this percent decoder to inspect an encoded path segment or query value. It performs one decoding pass and keeps a literal plus sign as +.

1
1

How to use URL Decode

Follow these steps to check the input and read the result.

Read percent-encoded text

  1. Type or paste the percent-encoded value you want to inspect into URL Encoded String.
  2. Leave Input Encoding: at UTF-8. The current operation reads the entered string directly; this selector does not change percent-decoding behavior.
  3. Keep Auto / Live on to update the result as you edit. To process it manually, turn Auto / Live off and click Run.
  4. Read Decoded URL String and check the result before using it.
  5. Click Copy to copy the result. Use Clear where shown, or a field’s clear control, to clear the text before starting again.

Enter hello%20world%2B to get hello world+. Input a+b stays a+b; it is not converted to a b.

Decode a component in context

Decoding an encoded delimiter can change its meaning if you paste it back into a URL. For example, %26 becomes an ampersand. Inspect an individual value before deciding how to use it in a complete address.

Recognize a single decoding pass

Input %2520 becomes %20 after one pass. Malformed escapes such as %ZZ remain as entered. This behavior follows raw percent decoding rather than a strict decodeURIComponent error path.

Frequently asked questions

This tool uses raw percent-decoding behavior. It does not apply the form-urlencoded rule that treats + as a space. An encoded space such as %20 does become a space.

API — Percent Decoder

Automate this tool directly from your scripts, CI/CD pipelines, or backend applications via HTTP POST.

No API Key Required 60 req/min
https://million.tools/api/v1/run/url-decode

Request Parameters (JSON / Form Data)

  • start (or input)

    URL Encoded String

    Type: string Default: —
  • input_encoding

    Input Encoding

    hex hex_ignore_non_hex base64 utf-8 utf-16le utf-16be windows-1251 windows-1252
    Type: string Default: utf-8
bash — cURL
curl -X POST https://million.tools/api/v1/run/url-decode \
  -H "Content-Type: application/json" \
  -d '{"start":"a+b%20%2F%3F%3D%zz"}'
const response = await fetch('https://million.tools/api/v1/run/url-decode', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "start": "a+b%20%2F%3F%3D%zz"
  }),
});

const data = await response.json();
console.log(data.result);
import requests

response = requests.post(
    'https://million.tools/api/v1/run/url-decode',
    json={
        "start": "a+b%20%2F%3F%3D%zz",
    },
    timeout=15,
)

data = response.json()
print(data['result'])
$ch = curl_init('https://million.tools/api/v1/run/url-decode');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'start' => 'a+b%20%2F%3F%3D%zz',
    ]),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

echo $response['result'] ?? '';
{
    "status": "success",
    "tool": "url-decode",
    "service": "url_decode",
    "result": "a+b /?=%zz",
    "results": {
        "result": "a+b /?=%zz"
    }
}
Egor Volchenko
Egor Volchenko Developer & Author

Hi! I’m a WordPress developer with over 10 years of experience. I love Tailwind CSS, clean code, and intuitive interfaces. I’m currently working on million.tools — a service with convenient online tools for everyday tasks. I’m building it from scratch with great attention to detail and user experience.

Published:
Updated:

Ratings & feedback 0

Share your experience with this tool.

Leave feedback

Your rating (optional)

Select a rating

Write a review, leave a rating, or do both.

Your email stays private.

No feedback yet

Be the first to leave a review or rating.