Squirrl Squirrl - 6 months ago 50
Javascript Question

Using JS - jQuery, how can I unescape html and put `quotes & <>` back in the string?

Essentially I want to undo the escapeHTML() function I found below, after I used it.

function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
}

function unescapeHtml(safe) {
return safe
.replace("&amp;", /&/g)
.replace("&lt;", /</g)
.replace( "&gt;", />/g)
.replace("&quot;", /"/g)
.replace("&#039;", /'/g);
}


var a = escapeHtml("<div> yo & yo squirrl's </div>");
var b = unescapeHtml(a);
console.log(a);
console.log(b);//should log "<div> yo & yo squirrl's </div>"


I tried the obvious but no deal. http://jsfiddle.net/ej6bX/

Answer

You need to use

function unescapeHtml(safe) {
    return safe.replace(/&amp;/g, '&')
        .replace(/&lt;/g, '<')
        .replace(/&gt;/g, '>')
        .replace(/&quot;/g, '"')
        .replace(/&#039;/g, "'");
}

A more clear approach using jQuery could be

function escapeHtml(unsafe) {
    return $('<div />').text(unsafe).html()
}

function unescapeHtml(safe) {
    return $('<div />').html(safe).text();
}

Demo: Fiddle