🔗URLToolKit
🧰Tools
2026-07-08·8 min read

Common URL Encoding Errors and How to Fix Them

Troubleshoot the most common URL encoding errors including double encoding, character corruption, and security issues.

Common URL Encoding Errors

URL encoding errors can cause broken links, security vulnerabilities, and data corruption. This guide covers the most common errors and their solutions.

Error 1: Double Encoding

Symptom: URLs contain %25 instead of expected characters (%25 is the encoding of %). Cause: Encoding an already-encoded string.
// Problem
const text = 'hello world';
const encoded = encodeURIComponent(text); // hello%20world
const doubleEncoded = encodeURIComponent(encoded); // hello%2520world

// Fix: Check if already encoded before encoding
function safeEncode(str) {
try {
// If decoding changes the string, it was already encoded
if (decodeURIComponent(str) !== str) {
return str; // Already encoded, return as-is
}
} catch (e) {
// Decoding failed, so it's not encoded
}
return encodeURIComponent(str);
}

Error 2: Using the Wrong Encoding Function

Symptom: URLs are broken — either over-encoded or under-encoded. Cause: Using encodeURI when you need encodeURIComponent, or vice versa.
// Problem: Using encodeURI for a query parameter
const name = 'A & B';
const wrong = ?name=${encodeURI(name)};  // ?name=A%20&%20B
// The & creates a new parameter!

// Fix: Use encodeURIComponent for parameter values
const right = ?name=${encodeURIComponent(name)}; // ?name=A%20%26%20B

FunctionEncodes & = ?Use For
encodeURINoFull URLs
encodeURIComponentYesParameter values, path segments

Error 3: Not Encoding User Input

Symptom: Security vulnerabilities, broken URLs, or unexpected behavior. Cause: Directly inserting user input into URLs without encoding.
// VULNERABLE
const userInput = 'test&admin=true';
const url = https://api.example.com?name=${userInput};
// https://api.example.com?name=test&admin=true — parameter injection!

// SECURE
const url = https://api.example.com?name=${encodeURIComponent(userInput)};
// https://api.example.com?name=test%26admin%3Dtrue

Error 4: Plus Sign Confusion

Symptom: Plus signs (+) in data become spaces, or spaces become plus signs unexpectedly. Cause: + means space in application/x-www-form-urlencoded (query strings), but is a literal + in URL paths.
// Problem: Plus in query string becomes space
const data = '2 + 2';
const url = ?expr=${data};
// Server reads: "2   2" (plus becomes space)

// Fix: Encode the plus sign
const url = ?expr=${encodeURIComponent(data)};
// ?expr=2%20%2B%202 — server correctly reads "2 + 2"

Error 5: Unicode Character Corruption

Symptom: Non-ASCII characters (Chinese, Arabic, emoji) appear as garbled text. Cause: Incorrect encoding of UTF-8 multibyte characters.
// Problem: Manual encoding of Unicode
const text = '你好';
const wrong = text.split('').map(c => '%' + c.charCodeAt(0).toString(16)).join('');
// %4f%60%59%7d — WRONG (treats each character as single byte)

// Fix: Use encodeURIComponent (handles UTF-8 correctly)
const right = encodeURIComponent(text);
// %E4%BD%A0%E5%A5%BD — Correct UTF-8 encoding

Error 6: Slashes in Path Segments

Symptom: URLs with encoded slashes in path segments are rejected or misrouted. Cause: Some web servers/frameworks don't accept encoded slashes (%2F) in path segments by default.
// Problem: Encoded slashes in path
const folder = 'folder/subfolder';
const url = /files/${encodeURIComponent(folder)};
// /files/folder%2Fsubfolder — some servers reject this

// Solutions:
// 1. Use a query parameter instead
const url1 = /files?path=${encodeURIComponent(folder)};

// 2. Use base64 encoding for path segments
const url2 = /files/${btoa(folder)};

// 3. Configure server to allow encoded slashes (Apache: AllowEncodedSlashes On)

Error 7: Hash Fragment Issues

Symptom: Everything after # is not sent to the server. Cause: URL fragments (after #) are client-side only and never sent to the server.
// Problem: Important data in fragment
const url = https://api.example.com/data#token=abc123;
// Server never sees token=abc123!

// Fix: Use query parameters for server-side data
const url = https://api.example.com/data?token=${encodeURIComponent('abc123')};

Error 8: URL Length Limits

Symptom: URLs are truncated or rejected with 414 URI Too Long error. Cause: URLs exceeding server/browser limits.
ComponentMax URL Length
Chrome2MB
Firefox65536 chars
Internet Explorer2083 chars
Apache8190 bytes
Nginx4096 bytes (configurable)
Fix: Use POST requests for large data instead of URL parameters.

Error 9: Case Sensitivity

Symptom: Encoded characters work on one system but fail on another. Cause: Hex codes in percent encoding should be uppercase, but some systems accept lowercase.
// Best practice: Always use uppercase hex digits
const correct = encodeURIComponent('test'); // test

// For manual encoding, use uppercase
function encodeByte(byte) {
return '%' + byte.toString(16).toUpperCase();
}

Error 10: Incomplete Decoding

Symptom: Partially decoded URLs with remaining %XX sequences. Cause: Decoding stopped early or decoder doesn't handle all sequences.
// Problem: Some decoders don't handle all sequences
const encoded = 'hello%20world%u4e16'; // %u format is non-standard

// Fix: Use standard decoding
const decoded = decodeURIComponent('hello%20world%E4%B8%96'); // hello world世

Debugging Checklist

    • [ ] Using the correct encoding function (encodeURI vs encodeURIComponent)
    • [ ] Not double-encoding already-encoded data
    • [ ] Encoding all user input before putting in URLs
    • [ ] Handling plus signs correctly in query strings
    • [ ] Using encodeURIComponent for Unicode/UTF-8
    • [ ] Not putting server-side data in URL fragments
    • [ ] URL length within server limits
    • [ ] Using uppercase hex digits in percent encoding
    • [ ] Testing with special characters: & = ? # + % space
    • [ ] Testing with non-ASCII: 中文, العربية, emoji

Using Our Tool

Our URL Encoder helps you avoid these errors by:

    • Automatically detecting the right encoding

    • Handling Unicode correctly

    • Preventing double encoding

    • Showing both encoded and decoded forms

    • Processing everything locally for security

Conclusion

URL encoding errors are common but preventable. By understanding these common pitfalls and using the right encoding function for each context, you can build reliable web applications. Use our URL Encoder to encode and decode URLs safely and correctly.