URL Decode
Developer & Author —Egor VolchenkoURL 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 +.
How to use URL Decode
Follow these steps to check the input and read the result.
Read percent-encoded text
- Type or paste the percent-encoded value you want to inspect into URL Encoded String.
- Leave Input Encoding: at UTF-8. The current operation reads the entered string directly; this selector does not change percent-decoding behavior.
- Keep Auto / Live on to update the result as you edit. To process it manually, turn Auto / Live off and click Run.
- Read Decoded URL String and check the result before using it.
- 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.
https://million.tools/api/v1/run/url-decode Request Parameters (JSON / Form Data)
-
start(orinput)URL Encoded String
-
input_encodingInput Encoding
hexhex_ignore_non_hexbase64utf-8utf-16leutf-16bewindows-1251windows-1252
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"
}
}
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.
Ratings & feedback 0
Share your experience with this tool.
No feedback yet
Be the first to leave a review or rating.