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

How to URL decode in Ruby

How to URL Decode in Ruby

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, as it ensures that the URL is properly formatted and can be used as intended. In Ruby, URL decoding is a straightforward process that can be achieved using the URI module.

Quick Example

Here is a minimal example of how to URL decode a string in Ruby:

require 'uri'

encoded_url = "https%3A%2F%2Fexample.com%2Fpath%3Fparam%3Dvalue"
decoded_url = URI.decode(encoded_url)

puts decoded_url # Output: https://example.com/path?param=value

This code uses the URI.decode method to decode the URL-encoded string.

Step-by-Step Breakdown

Let's break down the code line by line:

require 'uri'

This line imports the URI module, which provides methods for working with URLs.

encoded_url = "https%3A%2F%2Fexample.com%2Fpath%3Fparam%3Dvalue"

This line sets the URL-encoded string that we want to decode.

decoded_url = URI.decode(encoded_url)

This line uses the URI.decode method to decode the URL-encoded string. The decode method takes a string as input and returns the decoded string.

puts decoded_url # Output: https://example.com/path?param=value

This line prints the decoded URL to the console.

Handling Edge Cases

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

Empty/Null Input

If the input string is empty or null, the URI.decode method will return an empty string.

encoded_url = ""
decoded_url = URI.decode(encoded_url)
puts decoded_url # Output: ""

Invalid Input

If the input string is not a valid URL-encoded string, the URI.decode method will raise an error.

encoded_url = " invalid input "
decoded_url = URI.decode(encoded_url) # Raises URI::InvalidURIError

To handle this case, you can use a begin/rescue block to catch the error:

begin
  decoded_url = URI.decode(encoded_url)
rescue URI::InvalidURIError
  puts "Invalid input"
end

Large Input

The URI.decode method can handle large input strings without issues.

encoded_url = "https%3A%2F%2Fexample.com%2Fpath%3Fparam%3Dvalue" * 1000
decoded_url = URI.decode(encoded_url)
puts decoded_url # Output: https://example.com/path?param=value ( repeated 1000 times )

Unicode/Special Characters

The URI.decode method can handle Unicode and special characters without issues.

encoded_url = "https%3A%2F%2Fexample.com%2Fpath%3Fparam%3D%E6%9C%AC%E8%AF%AD%E9%87%8D%E6%96%B9"
decoded_url = URI.decode(encoded_url)
puts decoded_url # Output: https://example.com/path?param= ( Japanese characters )

Common Mistakes

Here are some common mistakes developers make when URL decoding in Ruby:

Mistake 1: Not Handling Errors

# Wrong
decoded_url = URI.decode(encoded_url)

# Correct
begin
  decoded_url = URI.decode(encoded_url)
rescue URI::InvalidURIError
  puts "Invalid input"
end

Mistake 2: Not Checking for Null Input

# Wrong
decoded_url = URI.decode(encoded_url)

# Correct
if encoded_url.present?
  decoded_url = URI.decode(encoded_url)
else
  puts "Input is empty"
end

Mistake 3: Using the Wrong Method

# Wrong
decoded_url = CGI.unescape(encoded_url)

# Correct
decoded_url = URI.decode(encoded_url)

Performance Tips

Here are some performance tips for URL decoding in Ruby:

Tip 1: Use the URI Module

The URI module is optimized for performance and is the recommended way to URL decode in Ruby.

Tip 2: Avoid Using CGI.unescape

The CGI.unescape method is not optimized for performance and should be avoided.

Tip 3: Use URI.decode Instead of URI.decode_www_form

The URI.decode_www_form method is slower than URI.decode and should be avoided unless you need to decode a URL-encoded form.

FAQ

Q: What is the difference between URI.decode and CGI.unescape?

A: URI.decode is optimized for performance and is the recommended way to URL decode in Ruby, while CGI.unescape is not optimized and should be avoided.

Q: How do I handle errors when URL decoding?

A: Use a begin/rescue block to catch the error and handle it accordingly.

Q: Can I use URI.decode to decode a URL-encoded form?

A: No, use URI.decode_www_form instead.

Q: Is URI.decode thread-safe?

A: Yes, URI.decode is thread-safe.

Q: Can I use URI.decode to decode a large input string?

A: Yes, URI.decode can handle large input strings without issues.

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