URIError: malformed URI sequence - 7-Views
URIError: malformed URI sequence
The point is that if you use single % it breaks the logic of decodeURIComponent() function as it expects two-digit data-value followed right after it, for example, %20 (space). There is a solution to this. We need to check first if the decodeURIComponent() actually can run on given string and if not return the string as it is.
function decodeURIComponentSafe(uri, mod) {
var out = new String(), arr, i = 0, l, x;
typeof mod === "undefined" ? mod = 0 : 0;
arr = uri.split(/(%(?:d0|d1)%.{2})/);
for (l = arr.length; i < l; i++) {
try {
x = decodeURIComponent(arr[i]);
} catch (e) {
x = mod ? arr[i].replace(/%(?!\d+)/g, '%25') : arr[i];
}
out += x;
}
return out;
}