Home All Tools About Search Tools

URL Decoder & Encoder

Free online URL decoder and Encoder tool. Decode URL-encoded strings, convert percent-encoded characters back to readable text. Supports multiple encodings and batch processing.

0 Characters
0 Encoded
0ms Processing Time
0 chars

Decoding Options

Character Encoding

Select character encoding for non-ASCII characters

Quick Examples

0 chars
Encoding Detected
-
Percent Encoded
0%
Characters Decoded
0

Encoding Analysis

Reserved Chars
0
Unicode Chars
0
Spaces
0
Special Chars
0

URL Encoding Reference Table

Character URL Encoded Description Category
space %20 or + Space character Unsafe
! %21 Exclamation mark Safe
" %22 Double quote Unsafe
# %23 Hash/number sign Reserved
$ %24 Dollar sign Reserved
% %25 Percent sign Reserved
& %26 Ampersand Reserved
' %27 Single quote Safe
( %28 Left parenthesis Safe
) %29 Right parenthesis Safe
* %2A Asterisk Safe
+ %2B Plus sign Reserved
, %2C Comma Safe
/ %2F Forward slash Reserved
: %3A Colon Reserved
; %3B Semicolon Reserved
< %3C Less than Unsafe
= %3D Equals sign Reserved
> %3E Greater than Unsafe
? %3F Question mark Reserved
@ %40 At sign Reserved
[ %5B Left bracket Unsafe
\ %5C Backslash Unsafe
] %5D Right bracket Unsafe
^ %5E Caret Unsafe
` %60 Backtick Unsafe
{ %7B Left brace Unsafe
| %7C Vertical bar Unsafe
} %7D Right brace Unsafe
~ %7E Tilde Safe

The Complete Guide to URL Encoding and Decoding

Understanding URL Encoding (Percent Encoding)

URL encoding, also known as percent-encoding, is a mechanism for encoding information in a Uniform Resource Identifier (URI) under certain circumstances. It was introduced in RFC 3986 as the standard for encoding data in URLs. The encoding consists of replacing unsafe ASCII characters with a "%" followed by two hexadecimal digits representing the character's ASCII code.

This encoding is necessary because URLs have a limited character set they can contain. Only alphanumeric characters and some special characters are allowed to be used in their literal form. All other characters must be encoded to ensure proper transmission and interpretation across different systems and networks.

Character Categories in URLs

1. Unreserved Characters (Safe Characters)

These characters can be used in URLs without encoding:

A-Z, a-z, 0-9          # Alphanumeric
- _ . ~                # Special characters that are safe

2. Reserved Characters

These characters have special meaning in URLs and must be encoded when used as data:

! * ' ( )              # Sub-delimiters (generally safe but reserved)
; / ? : @ & = + $ #    # Gen-delimiters (must be encoded in data)

3. Unsafe Characters

These characters must always be encoded in URLs:

space                  %20
"                      %22
<                      %3C
>                      %3E
#                      %23
%                      %25
{ } | \ ^ ~ [ ] `      # Various delimiters and control characters

How URL Encoding Works

Basic Encoding Process

  1. Convert character to its ASCII/Unicode code point
  2. Convert code point to hexadecimal representation
  3. Prepend with % symbol
  4. Replace original character with encoded sequence

Example: Encoding "Hello World!"

Original:  Hello World!
Encoded:   Hello%20World%21
Breakdown:
  Space (ASCII 32) β†’ %20
  ! (ASCII 33) β†’ %21

Encoding Non-ASCII Characters (Unicode)

For Unicode characters outside the ASCII range, UTF-8 encoding is typically used:

Character: Β© (copyright symbol)
UTF-8 bytes: 0xC2 0xA9
URL encoded: %C2%A9

Character: δΈ­ζ–‡
UTF-8: E4 B8 AD E6 96 87
URL encoded: %E4%B8%AD%E6%96%87

JavaScript Encoding Functions

Function Purpose What It Encodes What It Doesn't Encode Use Case
encodeURI() Encode complete URL Spaces and most special chars A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # Encoding entire URLs
encodeURIComponent() Encode URI component Everything except alphanumerics and - _ . ! ~ * ' ( ) A-Z a-z 0-9 - _ . ! ~ * ' ( ) Encoding query parameters
escape() Old encoding function Non-ASCII chars and some special chars A-Z a-z 0-9 @ * _ + - . / Deprecated - avoid use

Comparison Example:

const url = "https://example.com/search?q=hello world&page=1";

encodeURI(url):
"https://example.com/search?q=hello%20world&page=1"
// Encodes space but not ? or &

encodeURIComponent(url):
"https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%26page%3D1"
// Encodes everything including :, /, ?, &

Common URL Encoding Scenarios

1. Query Parameters

Query strings require careful encoding, especially for special values:

Original query:  search?q=cafΓ© & restaurant&sort=price&page=1
Encoded query:   search?q=caf%C3%A9%20%26%20restaurant&sort=price&page=1

Breakdown:
  cafΓ© β†’ caf%C3%A9        (UTF-8 encoding of Γ©)
  space β†’ %20
  & β†’ %26                 (must be encoded in query values)
  = and & in structure are NOT encoded

2. Form Data (application/x-www-form-urlencoded)

HTML form submissions use a specific encoding format:

Form data:  name=John [email protected]&message=Hello World!
Encoded:    name=John+Doe&email=john%40example.com&message=Hello+World%21

Special rules:
  Spaces become + (plus signs)
  @ becomes %40
  ! becomes %21
  = and & separate name-value pairs

3. File Paths in URLs

File paths often contain spaces and special characters:

Original path:  /documents/report Q1 2024.pdf
Encoded path:   /documents/report%20Q1%202024.pdf

Original path:  /files/my#special$file.txt
Encoded path:   /files/my%23special%24file.txt

URL Decoding Process

Basic Decoding Algorithm

  1. Scan string for % sequences
  2. Extract two hexadecimal digits after each %
  3. Convert hex to decimal character code
  4. Replace %XX with decoded character
  5. Convert + to spaces (if in form-encoded mode)

Decoding Example:

Encoded:  Hello%20World%21%20How%27s%20it%20going%3F
Step 1:   Hello [%20] World [%21] [%20] How [%27] s [%20] it [%20] going [%3F]
Step 2:   %20 β†’ 32 (space)
          %21 β†’ 33 (!)
          %27 β†’ 39 (')
          %3F β†’ 63 (?)
Step 3:   Hello World! How's it going?

Handling Malformed Encodings

Common issues and how to handle them:

Malformed Pattern Problem Solution
%2 Incomplete encoding (only one hex digit) Treat as literal %2 or replace with placeholder
%XX (non-hex) Invalid hexadecimal digits Treat as literal characters
%%20 Double percent encoding Decode recursively: %%20 β†’ %20 β†’ space
Mixed + and %20 Inconsistent space encoding Convert all + to spaces, then decode %20

Advanced Topics

1. Double Encoding

Sometimes URLs get encoded multiple times, often by mistake:

Original:        space
First encode:    %20
Second encode:   %2520  (% becomes %25)
Decode once:     %20
Decode twice:    space

2. Character Encoding Issues

Different character encodings can cause problems:

3. Security Considerations

⚠️ Security Best Practices

  1. Validate before decoding: Check for suspicious patterns
  2. Set length limits: Prevent denial of service via long encoded strings
  3. Use whitelists: Only allow expected characters after decoding
  4. Watch for encoding attacks: Attackers may use encoding to bypass filters
  5. Decode once only: Multiple decoding can hide malicious content

Practical Examples and Use Cases

1. Web Development

// JavaScript: Decoding query parameters
const params = new URLSearchParams(window.location.search);
const searchTerm = decodeURIComponent(params.get('q') || '');

// PHP: Decoding POST data
$name = urldecode($_POST['name']);
$email = urldecode($_POST['email']);

// Python: Decoding URL components
from urllib.parse import unquote
decoded = unquote(encoded_string)

2. API Development

// Proper handling of encoded parameters in REST APIs
app.get('/api/search/:query', (req, res) => {
  const query = decodeURIComponent(req.params.query);
  // Now search with decoded query
  const results = searchDatabase(query);
  res.json(results);
});

// Encoding responses when necessary
app.get('/api/download/:filename', (req, res) => {
  const filename = decodeURIComponent(req.params.filename);
  res.setHeader('Content-Disposition', 
    `attachment; filename*=UTF-8''${encodeURIComponent(filename)}`);
});

3. Data Processing

// Processing log files with encoded URLs
function processLogLine(line) {
  // Extract and decode URLs from log entries
  const urlMatch = line.match(/GET\s+(\S+)/);
  if (urlMatch) {
    const encodedUrl = urlMatch[1];
    const decodedUrl = decodeURIComponent(encodedUrl);
    console.log(`Requested: ${decodedUrl}`);
  }
}

// Cleaning user-generated content
function cleanUserInput(input) {
  // Decode then sanitize
  const decoded = decodeURIComponent(input);
  const cleaned = sanitizeHtml(decoded);
  return cleaned;
}

Browser and Server Differences

Platform Encoding Function Decoding Function Notes
JavaScript (Browser) encodeURIComponent() decodeURIComponent() Throws error on malformed sequences
PHP urlencode() urldecode() Converts + to spaces by default
Python urllib.parse.quote() urllib.parse.unquote() Handles UTF-8 by default
Java URLEncoder.encode() URLDecoder.decode() Requires charset parameter
C# (.NET) Uri.EscapeDataString() Uri.UnescapeDataString() RFC 3986 compliant

πŸ’‘ Pro Tip: Always Specify Character Encoding

When working with URL encoding/decoding across different systems, always explicitly specify the character encoding (UTF-8 is recommended). This prevents issues with non-ASCII characters and ensures consistent behavior across platforms and languages.

Testing and Validation

  1. Round-trip testing: Encode β†’ Decode should return original text
  2. Boundary testing: Test with empty strings, very long strings
  3. Character set testing: Test with extended ASCII and Unicode
  4. Error handling: Test with malformed encoded strings
  5. Performance testing: Test with large volumes of data

Frequently Asked Questions

What is URL encoding/decoding?

URL encoding (percent-encoding) is a mechanism for encoding information in a URL by replacing unsafe ASCII characters with a "%" followed by two hexadecimal digits. URL decoding is the reverse process that converts these percent-encoded sequences back to their original characters.

Why do we need URL encoding?

URLs can only contain a limited set of characters from the ASCII character set. Characters outside this set, as well as certain reserved characters like ?, &, =, #, %, and spaces, must be encoded to ensure proper transmission and interpretation by web browsers and servers.

What characters are encoded in URLs?

Reserved characters (;, /, ?, :, @, &, =, +, $, #), unsafe characters (space, <, >, ", #, %, {, }, |, \, ^, ~, [, ], `), and non-ASCII characters (Unicode characters) must be encoded. Alphanumeric characters (A-Z, a-z, 0-9) and some special characters (-, _, ., ~) do not need encoding.

What is the difference between encodeURI and encodeURIComponent?

encodeURI() encodes a complete URL but leaves functional characters like :, /, ?, &, = intact. encodeURIComponent() encodes everything including these functional characters, making it suitable for encoding individual URL components like query parameters.

How do I handle plus signs (+) in URL decoding?

In URL encoding, spaces are typically encoded as %20. However, in the application/x-www-form-urlencoded format (used in form submissions), spaces are encoded as + signs. Our tool handles both cases, converting + to spaces when appropriate.

Can this tool decode malformed URL encodings?

The tool includes error handling for malformed encodings. It will show warnings for invalid percent-encoded sequences and provide options to handle them (ignore, replace with placeholder, or attempt recovery). Always validate decoded output when working with unknown inputs.

Back to all tools
Instant Results
Privacy First
Browser Based
100% Free