/**
* Decodes a URL-encoded string or query component.
* Replaces '+' with spaces and decodes percent-encoded characters (%xx).
*
* @param {string} encodedStr - The URL-encoded string.
* @returns {string} The fully decoded string.
*/
function decodeUrlString(encodedStr) {
try {
// Replace '+' with spaces first, as decodeURIComponent treats '+' literally
const normalizedStr = encodedStr.replace(/\+/g, ' ');
return decodeURIComponent(normalizedStr);
} catch (error) {
console.error("Decoding error:", error.message);
return encodedStr;
}
}
// --- Program Execution ---
if (typeof module !== 'undefined' && require.main === module) {
// Example 1: Standard URL encoding with special characters
const sample1 = "Hello%20World%21%20JavaScript%20%26%20Web";
console.log("--- Example 1: Standard URL Encoding ---");
console.log("Encoded:", sample1);
console.log("Decoded:", decodeUrlString(sample1));
// Example 2: Form query string fragment encoding (spaces as '+')
const sample2 = "Jane+Doe+from+New+York";
console.log("\n--- Example 2: Form Fragment Encoding ---");
console.log("Encoded:", sample2);
console.log("Decoded:", decodeUrlString(sample2));
}
/*
run:
--- Example 1: Standard URL Encoding ---
Encoded: Hello%20World%21%20JavaScript%20%26%20Web
Decoded: Hello World! JavaScript & Web
--- Example 2: Form Fragment Encoding ---
Encoded: Jane+Doe+from+New+York
Decoded: Jane Doe from New York
*/