Вы должны использовать encodeURI. Потому что encodeURIComponent не подходит для полных путей.
Попробуйте использовать функцию кодирования xml (encodeXml), очищающую ваш xml от усилителей:
var xml_special_to_escaped_one_map = {
'&': '&',
'"': '"',
'<': '<',
'>': '>'
};
var escaped_one_to_xml_special_map = {
'&': '&',
'"': '"',
'<': '<',
'>': '>'
};
function encodeXml(string) {
return string.replace(/([\&"<>])/g, function(str, item) {
return xml_special_to_escaped_one_map[item];
});
};
function decodeXml(string) {
return string.replace(/("|<|>|&)/g,
function(str, item) {
return escaped_one_to_xml_special_map[item];
});
}
Отсюда: http://dracoblue.net/dev/encodedecode-special-xml-characters-in-javascript/155/