NeuroAgent

Complete Guide to JavaScript URL Parameters

Learn how to retrieve complete values of GET parameters in JavaScript, including those with special characters like hyphens. Master URLSearchParams for proper parameter parsing.

Question

How to retrieve the complete value of a GET parameter in JavaScript when it contains special characters like hyphens?

I have a URL with GET parameters:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

I need to get the full value of parameter ‘c’, which should be ‘m2-m3-m4-m5’. However, when I try to read the URL, I only get ‘m2’. How can I properly extract the complete value of parameter ‘c’ using JavaScript?

NeuroAgent

The issue occurs because you’re likely using an incorrect method to parse URL parameters. To retrieve the complete value ‘m2-m3-m4-m5’ from parameter ‘c’, you should use the modern URLSearchParams interface which properly handles special characters like hyphens.


Contents


Understanding the Problem

The problem you’re experiencing occurs because traditional URL parsing methods often don’t properly handle special characters like hyphens in parameter values. When you have a parameter like c=m2-m3-m4-m5, some parsing techniques might incorrectly interpret the hyphens as parameter separators rather than part of the value.

According to the URLSearchParams specification, hyphens (-) are among the characters that don’t need to be percent-encoded in URL parameters, along with alphanumeric characters, asterisks (*), periods (.), and underscores (_).


Using URLSearchParams for Complete Parameter Retrieval

The most reliable method to get the full value of a parameter is using the URLSearchParams interface, which is supported in all modern browsers:

javascript
// Get the current URL's query string
const queryString = window.location.search;

// Create URLSearchParams object
const urlParams = new URLSearchParams(queryString);

// Get the complete value of parameter 'c'
const paramC = urlParams.get('c');

console.log(paramC); // Output: "m2-m3-m4-m5"

This method correctly handles the hyphens and returns the complete parameter value. The URLSearchParams.get() method automatically decodes percent-encoded values and returns the full string as it was originally specified.


Alternative Methods and Best Practices

Manual Parsing (Not Recommended)

If you need to support very old browsers or have specific parsing requirements, you could implement manual parsing, but this is generally not recommended:

javascript
function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
}

// Usage
const cValue = getQueryParam('c'); // Returns "m2-m3-m4-m5"

Setting Parameters with Special Characters

When setting URL parameters that contain special characters, use encodeURIComponent():

javascript
const baseUrl = 'http://example.com/page';
const paramValue = 'm2-m3-m4-m5';
const fullUrl = `${baseUrl}?c=${encodeURIComponent(paramValue)}`;

According to the Frontend Masters blog, encodeURIComponent() encodes all characters except standard ASCII alphanumeric characters, hyphens (“-”), asterisks (“*”), periods (“.”), and underscores (“_”).


Handling Special Characters

Characters That Don’t Need Encoding

The following characters are safe to use in URL parameter values without encoding:

  • Alphanumeric characters (A-Z, a-z, 0-9)
  • Hyphen (-)
  • Period (.)
  • Asterisk (*)
  • Underscore (_)

Characters That Should Be Encoded

Special characters that have meaning in URLs should be encoded:

  • & - Parameter separator
  • = - Parameter-value separator
  • + - Space character in query strings
  • # - Fragment identifier
  • % - Escape character
  • ? - Query string separator

Complete Working Example

Here’s a complete example that demonstrates how to properly handle URL parameters with special characters:

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>URL Parameter Test</title>
</head>
<body>
    <h1>URL Parameter Test</h1>
    <div id="result"></div>

    <script>
        // Test URL: www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
        const queryString = window.location.search;
        const urlParams = new URLSearchParams(queryString);
        
        // Get all parameter values
        const paramA = urlParams.get('a'); // "1"
        const paramB = urlParams.get('b'); // "3"
        const paramC = urlParams.get('c'); // "m2-m3-m4-m5"
        
        // Display results
        document.getElementById('result').innerHTML = `
            <p>Parameter a: <strong>${paramA}</strong></p>
            <p>Parameter b: <strong>${paramB}</strong></p>
            <p>Parameter c: <strong>${paramC}</strong></p>
            <p>Full query string: <strong>${queryString}</strong></p>
        `;
        
        // Example of setting a parameter with special characters
        const newParam = 'test-value-with-hyphens';
        const encodedParam = encodeURIComponent(newParam);
        console.log('Original:', newParam);
        console.log('Encoded:', encodedParam);
    </script>
</body>
</html>

This example shows that URLSearchParams correctly handles the hyphenated parameter value and returns the complete string ‘m2-m3-m4-m5’ for parameter ‘c’.


Conclusion

To properly retrieve complete URL parameter values containing special characters like hyphens:

  1. Always use URLSearchParams - This is the modern, reliable method for parsing URL parameters
  2. Use get() method - It automatically handles decoding and returns the complete parameter value
  3. Encode when setting - Use encodeURIComponent() when constructing URLs with special characters
  4. Test thoroughly - Verify your solution works with various parameter combinations

The key insight is that hyphens are valid characters in URL parameter values and don’t need to be encoded. When you use URLSearchParams.get(), it correctly interprets the entire parameter value including any hyphens, rather than treating them as separators.

For more complex scenarios involving multiple special characters, consider implementing proper validation on both client and server sides to ensure security and reliability.