Поскольку текст, который вы экранируете, будет отображаться в атрибуте HTML, вы должны обязательно избегать не только HTML-объектов, но и атрибутов HTML:
var ESC_MAP = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
function escapeHTML(s, forAttribute) {
return s.replace(forAttribute ? /[&<>'"]/g : /[&<>]/g, function(c) {
return ESC_MAP[c];
});
}
Затем ваш код экранирования станет var user_id = escapeHTML(id, true)
.
Для получения дополнительной информации см. Foolproof HTML escaping в Javascript .