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

How to URL encode in Ruby

How to URL encode in Ruby

URL encoding is the process of converting special characters in a URL to a format that can be safely transmitted over the internet. In Ruby, URL encoding is crucial when working with URLs that contain special characters, such as spaces, ampersands, or non-ASCII characters. If these characters are not properly encoded, they can cause issues with URL parsing, redirects, and even security vulnerabilities. In this guide, we will explore how to URL encode in Ruby, covering the basics, edge cases, common mistakes, and performance tips.

Quick Example

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

require 'uri'

def url_encode(str)
  URI.escape(str)
end

encoded_str = url_encode("https://example.com/path with spaces")
puts encoded_str # Output: https://example.com/path%20with%20spaces

This code uses the URI.escape method to encode the input string. The URI module is part of the Ruby Standard Library, so you don't need to install any additional dependencies.

Step-by-Step Breakdown

Let's break down the code line by line:

  • require 'uri': This line imports the URI module, which provides the escape method for URL encoding.
  • def url_encode(str): This line defines a method url_encode that takes a string str as input.
  • URI.escape(str): This line uses the URI.escape method to encode the input string. The escape method replaces special characters with their corresponding escape sequences.
  • encoded_str = url_encode("https://example.com/path with spaces"): This line calls the url_encode method with a sample input string and assigns the result to the variable encoded_str.
  • puts encoded_str: This line prints the encoded string to the console.

Handling Edge Cases

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

Empty/Null Input

When the input string is empty or null, the URI.escape method will return an empty string. You may want to add additional error handling or validation to handle this case:

def url_encode(str)
  return "" if str.nil? || str.empty?
  URI.escape(str)
end

Invalid Input

If the input string is not a valid URL, the URI.escape method may raise an exception. You can use a begin-rescue block to catch and handle this error:

def url_encode(str)
  begin
    URI.escape(str)
  rescue URI::InvalidURIError
    # Handle the error, e.g., return a default value or raise a custom error
  end
end

Large Input

When dealing with large input strings, the URI.escape method may be slow or consume excessive memory. In this case, you can use a streaming approach to encode the input string in chunks:

def url_encode(str)
  encoded_str = ""
  str.each_char do |char|
    encoded_str << URI.escape(char)
  end
  encoded_str
end

Unicode/Special Characters

When working with Unicode or special characters, the URI.escape method may not produce the expected results. In this case, you can use the URI.encode_www_form method, which is specifically designed to handle Unicode characters:

def url_encode(str)
  URI.encode_www_form(str)
end

Common Mistakes

Here are three common mistakes developers make when URL encoding in Ruby:

Mistake 1: Using the wrong encoding method

Incorrect code:

def url_encode(str)
  str.gsub(" ", "%20")
end

Corrected code:

def url_encode(str)
  URI.escape(str)
end

Explanation: The gsub method only replaces spaces with their corresponding escape sequence, but it does not handle other special characters.

Mistake 2: Not handling edge cases

Incorrect code:

def url_encode(str)
  URI.escape(str)
end

Corrected code:

def url_encode(str)
  return "" if str.nil? || str.empty?
  URI.escape(str)
end

Explanation: The corrected code adds error handling for empty or null input strings.

Mistake 3: Not using the correct URI module

Incorrect code:

def url_encode(str)
  require 'cgi'
  CGI.escape(str)
end

Corrected code:

def url_encode(str)
  require 'uri'
  URI.escape(str)
end

Explanation: The CGI module is not the recommended way to URL encode in Ruby. The URI module is part of the Ruby Standard Library and provides the escape method for URL encoding.

Performance Tips

Here are three practical performance tips for URL encoding in Ruby:

  1. Use the URI.escape method: The URI.escape method is optimized for performance and is the recommended way to URL encode in Ruby.
  2. Avoid using gsub or tr methods: These methods are slower and less efficient than the URI.escape method.
  3. Use a streaming approach for large input strings: When dealing with large input strings, use a streaming approach to encode the input string in chunks.

FAQ

Q: What is the difference between URI.escape and URI.encode_www_form?

A: URI.escape is a general-purpose URL encoding method, while URI.encode_www_form is specifically designed to handle Unicode characters.

Q: Can I use the CGI module for URL encoding?

A: No, the CGI module is not the recommended way to URL encode in Ruby. Use the URI module instead.

Q: How do I handle empty or null input strings?

A: You can add error handling or validation to handle empty or null input strings, such as returning an empty string or raising a custom error.

Q: Can I use URI.escape for large input strings?

A: Yes, but for very large input strings, you may want to use a streaming approach to encode the input string in chunks.

Q: What is the recommended way to URL encode in Ruby?

A: The recommended way to URL encode in Ruby is to use the URI.escape method.

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