Try it yourself with our free Url Encoder tool — runs entirely in your browser, no signup needed.

How to URL decode in JavaScript

How to URL Decode in JavaScript

URL decoding is the process of converting a URL-encoded string back into its original form. This is a crucial step when working with URLs in JavaScript, as it ensures that special characters and spaces are properly decoded and can be used as intended. In this guide, we'll explore how to URL decode in JavaScript, covering the basics, common use cases, and edge cases.

Quick Example

Here's a minimal example of how to URL decode a string in JavaScript:

const decodedUrl = decodeURIComponent('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource');
console.log(decodedUrl); // Output: https://example.com/path/to/resource

This code uses the decodeURIComponent() function to decode the URL-encoded string.

Step-by-Step Breakdown

Let's break down the code line by line:

  • const decodedUrl =: We declare a constant variable decodedUrl to store the decoded URL.
  • decodeURIComponent('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource'): We call the decodeURIComponent() function, passing the URL-encoded string as an argument. This function takes a single argument, which is the URL-encoded string to be decoded.
  • console.log(decodedUrl): We log the decoded URL to the console using console.log().

Handling Edge Cases

Here are some common edge cases to consider when URL decoding in JavaScript:

Empty/Null Input

What happens when you pass an empty or null value to decodeURIComponent()?

const decodedUrl = decodeURIComponent('');
console.log(decodedUrl); // Output: ""

In this case, the function returns an empty string.

Invalid Input

What happens when you pass an invalid URL-encoded string to decodeURIComponent()?

const decodedUrl = decodeURIComponent(' invalid%20input');
console.log(decodedUrl); // Output: " invalid input"

In this case, the function will throw a URIError exception.

Large Input

What happens when you pass a very large URL-encoded string to decodeURIComponent()?

const largeInput = 'https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource'.repeat(1000);
const decodedUrl = decodeURIComponent(largeInput);
console.log(decodedUrl); // Output: "https://example.com/path/to/resource" ( repeated 1000 times)

In this case, the function will still work correctly, but be aware that large inputs may impact performance.

Unicode/Special Characters

What happens when you pass a URL-encoded string containing Unicode or special characters to decodeURIComponent()?

const encodedUrl = 'https%3A%2F%2Fexample.com%2Fpath%2Fto%2F%C3%A9';
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl); // Output: "https://example.com/path/to/é"

In this case, the function correctly decodes the Unicode character.

Common Mistakes

Here are three common mistakes developers make when URL decoding in JavaScript:

Mistake 1: Using decodeURI() instead of decodeURIComponent()

decodeURI() is used to decode an entire URI, whereas decodeURIComponent() is used to decode a single URI component. Using the wrong function can lead to incorrect decoding.

const wrongDecodedUrl = decodeURI('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource');
console.log(wrongDecodedUrl); // Output: "https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource" (not decoded)

Corrected code:

const correctDecodedUrl = decodeURIComponent('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource');
console.log(correctDecodedUrl); // Output: "https://example.com/path/to/resource"

Mistake 2: Not handling errors

Failing to handle errors can lead to unexpected behavior or exceptions.

try {
  const decodedUrl = decodeURIComponent(' invalid%20input');
  console.log(decodedUrl);
} catch (error) {
  console.error(error); // Output: URIError: URI malformed
}

Corrected code:

try {
  const decodedUrl = decodeURIComponent('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource');
  console.log(decodedUrl);
} catch (error) {
  console.error(error);
}

Mistake 3: Not checking for null or empty input

Failing to check for null or empty input can lead to unexpected behavior or exceptions.

const decodedUrl = decodeURIComponent('');
console.log(decodedUrl); // Output: ""

Corrected code:

if (input !== null && input !== '') {
  const decodedUrl = decodeURIComponent(input);
  console.log(decodedUrl);
} else {
  console.log('Invalid input');
}

Performance Tips

Here are two practical performance tips for URL decoding in JavaScript:

Tip 1: Use decodeURIComponent() instead of regular expressions

Using regular expressions to decode URL-encoded strings can be slower and less efficient than using decodeURIComponent().

const decodedUrl = 'https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource'.replace(/%([a-fA-F0-9]{2})/g, (match, p1) => String.fromCharCode(parseInt(p1, 16)));
console.log(decodedUrl); // Output: "https://example.com/path/to/resource"

Corrected code:

const decodedUrl = decodeURIComponent('https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource');
console.log(decodedUrl); // Output: "https://example.com/path/to/resource"

Tip 2: Avoid decoding large inputs unnecessarily

Decoding large inputs can impact performance. Only decode inputs when necessary.

const largeInput = 'https%3A%2F%2Fexample.com%2Fpath%2Fto%2Fresource'.repeat(1000);
const decodedUrl = decodeURIComponent(largeInput);
console.log(decodedUrl); // Output: "https://example.com/path/to/resource" ( repeated 1000 times)

Corrected code:

if (input.length < 1000) {
  const decodedUrl = decodeURIComponent(input);
  console.log(decodedUrl);
} else {
  console.log('Input too large');
}

FAQ

Q: What is the difference between decodeURI() and decodeURIComponent()?

A: decodeURI() is used to decode an entire URI, whereas decodeURIComponent() is used to decode a single URI component.

Q: How do I handle errors when URL decoding in JavaScript?

A: Use a try-catch block to catch any errors that may occur during decoding.

Q: Can I use regular expressions to decode URL-encoded strings?

A: While possible, using regular expressions can be slower and less efficient than using decodeURIComponent().

Q: How do I decode a URL-encoded string containing Unicode characters?

A: Use decodeURIComponent() to correctly decode Unicode characters.

Q: What happens when I pass an empty or null value to decodeURIComponent()?

A: The function returns an empty string or throws a URIError exception, respectively.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp