0

The code here works well for transforming special characters into HTML entities.

http://jsbin.com/ETIjUpa/3/edit/

Is there anyway I can reverse the key value pairs of this object to translate back the other way?

it seems I should be able to do something like this, but I am lost about how to reverse the functionality of the charAt()

//sorry long object
if (typeof escapeHtmlEntities == 'undefined') {
    escapeHtmlEntities = function (text) {
        return text.replace(/[\u00A0-\u2666<>\&]/g, function (c) {
            return '&' + (escapeHtmlEntities.entityTable[c.charCodeAt(0)] || '#' + c.charCodeAt(0)) + ';';
        });
    };

    // all HTML4 entities as defined here: http://www.w3.org/TR/html4/sgml/entities.html
    // added: amp, lt, gt, quot and apos

    var escapeHtmlEntities = {},
    type = $("input[name=type]:checked").val();

    if (type === "from") {

        escapeHtmlEntities.entityTable = {
            34: 'quot',
            38: 'amp',
            39: 'apos',
            60: 'lt',
            62: 'gt',
            160: 'nbsp',
            161: 'iexcl',
            162: 'cent',
            163: 'pound',
            164: 'curren',
            165: 'yen',
            166: 'brvbar',
            167: 'sect',
            168: 'uml',
            169: 'copy',
            170: 'ordf',
            171: 'laquo',
            172: 'not',
            173: 'shy',
            174: 'reg',
            175: 'macr',
            176: 'deg',
            177: 'plusmn',
            178: 'sup2',
            179: 'sup3',
            180: 'acute',
            181: 'micro',
            182: 'para',
            183: 'middot',
            184: 'cedil',
            185: 'sup1',
            186: 'ordm',
            187: 'raquo',
            188: 'frac14',
            189: 'frac12',
            190: 'frac34',
            191: 'iquest',
            192: 'Agrave',
            193: 'Aacute',
            194: 'Acirc',
            195: 'Atilde',
            196: 'Auml',
            197: 'Aring',
            198: 'AElig',
            199: 'Ccedil',
            200: 'Egrave',
            201: 'Eacute',
            202: 'Ecirc',
            203: 'Euml',
            204: 'Igrave',
            205: 'Iacute',
            206: 'Icirc',
            207: 'Iuml',
            208: 'ETH',
            209: 'Ntilde',
            210: 'Ograve',
            211: 'Oacute',
            212: 'Ocirc',
            213: 'Otilde',
            214: 'Ouml',
            215: 'times',
            216: 'Oslash',
            217: 'Ugrave',
            218: 'Uacute',
            219: 'Ucirc',
            220: 'Uuml',
            221: 'Yacute',
            222: 'THORN',
            223: 'szlig',
            224: 'agrave',
            225: 'aacute',
            226: 'acirc',
            227: 'atilde',
            228: 'auml',
            229: 'aring',
            230: 'aelig',
            231: 'ccedil',
            232: 'egrave',
            233: 'eacute',
            234: 'ecirc',
            235: 'euml',
            236: 'igrave',
            237: 'iacute',
            238: 'icirc',
            239: 'iuml',
            240: 'eth',
            241: 'ntilde',
            242: 'ograve',
            243: 'oacute',
            244: 'ocirc',
            245: 'otilde',
            246: 'ouml',
            247: 'divide',
            248: 'oslash',
            249: 'ugrave',
            250: 'uacute',
            251: 'ucirc',
            252: 'uuml',
            253: 'yacute',
            254: 'thorn',
            255: 'yuml',
            402: 'fnof',
            913: 'Alpha',
            914: 'Beta',
            915: 'Gamma',
            916: 'Delta',
            917: 'Epsilon',
            918: 'Zeta',
            919: 'Eta',
            920: 'Theta',
            921: 'Iota',
            922: 'Kappa',
            923: 'Lambda',
            924: 'Mu',
            925: 'Nu',
            926: 'Xi',
            927: 'Omicron',
            928: 'Pi',
            929: 'Rho',
            931: 'Sigma',
            932: 'Tau',
            933: 'Upsilon',
            934: 'Phi',
            935: 'Chi',
            936: 'Psi',
            937: 'Omega',
            945: 'alpha',
            946: 'beta',
            947: 'gamma',
            948: 'delta',
            949: 'epsilon',
            950: 'zeta',
            951: 'eta',
            952: 'theta',
            953: 'iota',
            954: 'kappa',
            955: 'lambda',
            956: 'mu',
            957: 'nu',
            958: 'xi',
            959: 'omicron',
            960: 'pi',
            961: 'rho',
            962: 'sigmaf',
            963: 'sigma',
            964: 'tau',
            965: 'upsilon',
            966: 'phi',
            967: 'chi',
            968: 'psi',
            969: 'omega',
            977: 'thetasym',
            978: 'upsih',
            982: 'piv',
            8226: 'bull',
            8230: 'hellip',
            8242: 'prime',
            8243: 'Prime',
            8254: 'oline',
            8260: 'frasl',
            8472: 'weierp',
            8465: 'image',
            8476: 'real',
            8482: 'trade',
            8501: 'alefsym',
            8592: 'larr',
            8593: 'uarr',
            8594: 'rarr',
            8595: 'darr',
            8596: 'harr',
            8629: 'crarr',
            8656: 'lArr',
            8657: 'uArr',
            8658: 'rArr',
            8659: 'dArr',
            8660: 'hArr',
            8704: 'forall',
            8706: 'part',
            8707: 'exist',
            8709: 'empty',
            8711: 'nabla',
            8712: 'isin',
            8713: 'notin',
            8715: 'ni',
            8719: 'prod',
            8721: 'sum',
            8722: 'minus',
            8727: 'lowast',
            8730: 'radic',
            8733: 'prop',
            8734: 'infin',
            8736: 'ang',
            8743: 'and',
            8744: 'or',
            8745: 'cap',
            8746: 'cup',
            8747: 'int',
            8756: 'there4',
            8764: 'sim',
            8773: 'cong',
            8776: 'asymp',
            8800: 'ne',
            8801: 'equiv',
            8804: 'le',
            8805: 'ge',
            8834: 'sub',
            8835: 'sup',
            8836: 'nsub',
            8838: 'sube',
            8839: 'supe',
            8853: 'oplus',
            8855: 'otimes',
            8869: 'perp',
            8901: 'sdot',
            8968: 'lceil',
            8969: 'rceil',
            8970: 'lfloor',
            8971: 'rfloor',
            9001: 'lang',
            9002: 'rang',
            9674: 'loz',
            9824: 'spades',
            9827: 'clubs',
            9829: 'hearts',
            9830: 'diams',
            338: 'OElig',
            339: 'oelig',
            352: 'Scaron',
            353: 'scaron',
            376: 'Yuml',
            710: 'circ',
            732: 'tilde',
            8194: 'ensp',
            8195: 'emsp',
            8201: 'thinsp',
            8204: 'zwnj',
            8205: 'zwj',
            8206: 'lrm',
            8207: 'rlm',
            8211: 'ndash',
            8212: 'mdash',
            8216: 'lsquo',
            8217: 'rsquo',
            8218: 'sbquo',
            8220: 'ldquo',
            8221: 'rdquo',
            8222: 'bdquo',
            8224: 'dagger',
            8225: 'Dagger',
            8240: 'permil',
            8249: 'lsaquo',
            8250: 'rsaquo',
            8364: 'euro'
        };
    } else {

        escapeHtmlEntities.entityTable = {
            AElig: "198",
            Aacute: "193",
            Acirc: "194",
            Agrave: "192",
            Alpha: "913",
            Aring: "197",
            Atilde: "195",
            Auml: "196",
            Beta: "914",
            Ccedil: "199",
            Chi: "935",
            Dagger: "8225",
            Delta: "916",
            ETH: "208",
            Eacute: "201",
            Ecirc: "202",
            Egrave: "200",
            Epsilon: "917",
            Eta: "919",
            Euml: "203",
            Gamma: "915",
            Iacute: "205",
            Icirc: "206",
            Igrave: "204",
            Iota: "921",
            Iuml: "207",
            Kappa: "922",
            Lambda: "923",
            Mu: "924",
            Ntilde: "209",
            Nu: "925",
            OElig: "338",
            Oacute: "211",
            Ocirc: "212",
            Ograve: "210",
            Omega: "937",
            Omicron: "927",
            Oslash: "216",
            Otilde: "213",
            Ouml: "214",
            Phi: "934",
            Pi: "928",
            Prime: "8243",
            Psi: "936",
            Rho: "929",
            Scaron: "352",
            Sigma: "931",
            THORN: "222",
            Tau: "932",
            Theta: "920",
            Uacute: "218",
            Ucirc: "219",
            Ugrave: "217",
            Upsilon: "933",
            Uuml: "220",
            Xi: "926",
            Yacute: "221",
            Yuml: "376",
            Zeta: "918",
            aacute: "225",
            acirc: "226",
            acute: "180",
            aelig: "230",
            agrave: "224",
            alefsym: "8501",
            alpha: "945",
            amp: "38",
            and: "8743",
            ang: "8736",
            apos: "39",
            aring: "229",
            asymp: "8776",
            atilde: "227",
            auml: "228",
            bdquo: "8222",
            beta: "946",
            brvbar: "166",
            bull: "8226",
            cap: "8745",
            ccedil: "231",
            cedil: "184",
            cent: "162",
            chi: "967",
            circ: "710",
            clubs: "9827",
            cong: "8773",
            copy: "169",
            crarr: "8629",
            cup: "8746",
            curren: "164",
            dArr: "8659",
            dagger: "8224",
            darr: "8595",
            deg: "176",
            delta: "948",
            diams: "9830",
            divide: "247",
            eacute: "233",
            ecirc: "234",
            egrave: "232",
            empty: "8709",
            emsp: "8195",
            ensp: "8194",
            epsilon: "949",
            equiv: "8801",
            eta: "951",
            eth: "240",
            euml: "235",
            euro: "8364",
            exist: "8707",
            fnof: "402",
            forall: "8704",
            frac12: "189",
            frac14: "188",
            frac34: "190",
            frasl: "8260",
            gamma: "947",
            ge: "8805",
            gt: "62",
            hArr: "8660",
            harr: "8596",
            hearts: "9829",
            hellip: "8230",
            iacute: "237",
            icirc: "238",
            iexcl: "161",
            igrave: "236",
            image: "8465",
            infin: "8734",
            int: "8747",
            iota: "953",
            iquest: "191",
            isin: "8712",
            iuml: "239",
            kappa: "954",
            lArr: "8656",
            lambda: "955",
            lang: "9001",
            laquo: "171",
            larr: "8592",
            lceil: "8968",
            ldquo: "8220",
            le: "8804",
            lfloor: "8970",
            lowast: "8727",
            loz: "9674",
            lrm: "8206",
            lsaquo: "8249",
            lsquo: "8216",
            lt: "60",
            macr: "175",
            mdash: "8212",
            micro: "181",
            middot: "183",
            minus: "8722",
            mu: "956",
            nabla: "8711",
            nbsp: "160",
            ndash: "8211",
            ne: "8800",
            ni: "8715",
            not: "172",
            notin: "8713",
            nsub: "8836",
            ntilde: "241",
            nu: "957",
            oacute: "243",
            ocirc: "244",
            oelig: "339",
            ograve: "242",
            oline: "8254",
            omega: "969",
            omicron: "959",
            oplus: "8853",
            or: "8744",
            ordf: "170",
            ordm: "186",
            oslash: "248",
            otilde: "245",
            otimes: "8855",
            ouml: "246",
            para: "182",
            part: "8706",
            permil: "8240",
            perp: "8869",
            phi: "966",
            pi: "960",
            piv: "982",
            plusmn: "177",
            pound: "163",
            prime: "8242",
            prod: "8719",
            prop: "8733",
            psi: "968",
            quot: "34",
            rArr: "8658",
            radic: "8730",
            rang: "9002",
            raquo: "187",
            rarr: "8594",
            rceil: "8969",
            rdquo: "8221",
            real: "8476",
            reg: "174",
            rfloor: "8971",
            rho: "961",
            rlm: "8207",
            rsaquo: "8250",
            rsquo: "8217",
            sbquo: "8218",
            scaron: "353",
            sdot: "8901",
            sect: "167",
            shy: "173",
            sigma: "963",
            sigmaf: "962",
            sim: "8764",
            spades: "9824",
            sub: "8834",
            sube: "8838",
            sum: "8721",
            sup: "8835",
            sup1: "185",
            sup2: "178",
            sup3: "179",
            supe: "8839",
            szlig: "223",
            tau: "964",
            there4: "8756",
            theta: "952",
            thetasym: "977",
            thinsp: "8201",
            thorn: "254",
            tilde: "732",
            times: "215",
            trade: "8482",
            uArr: "8657",
            uacute: "250",
            uarr: "8593",
            ucirc: "251",
            ugrave: "249",
            uml: "168",
            upsih: "978",
            upsilon: "965",
            uuml: "252",
            weierp: "8472",
            xi: "958",
            yacute: "253",
            yen: "165",
            yuml: "255",
            zeta: "950",
            zwj: "8205",
            zwnj: "8204"
        };
    }


    $(document).ready(function () {
        $("body").on("click", "#process", function () {
            var text = $("#input").val();
            $("#input").val(escapeHtmlEntities(text));
        });
    });
}

http://jsfiddle.net/X6smG/

I included the jQuery tag in case there is a very simple way to achieve this using jQuery

Community
  • 1
  • 1
1252748
  • 14,597
  • 32
  • 109
  • 229

1 Answers1

1

You could do a reverse lookup on your object, but with jQuery you can actually use a little trick to decode those characters, like so:

var val = $('textarea').val();
$('textarea').val( $('<div/>').html(val).text() );

Basically you are creating a dummy div element through jQuery, filling it up with your encoded entities, and then retrieving the text node of the element, hereby assigning it to the value of the textarea.

Working example

Sunyatasattva
  • 5,619
  • 3
  • 27
  • 37
  • http://jsfiddle.net/4Wtut/ I don't understand; it does not seem to convert either. edit: corrected significant errors in the fiddle. – 1252748 Oct 08 '13 at 04:41
  • I don't understand what you are trying to do in this example. – Sunyatasattva Oct 08 '13 at 04:45
  • do you know is there a better way to do it going the other way than that tremendous object? – 1252748 Oct 08 '13 at 04:53
  • In the end your *tremendous object* lookup is not a very expensive operation, my jQuery *trick* might be more expensive. I am not aware of a way. I mean, you could reverse the trick by doing `$('
    ').text(val).html()` but that will only escape the html and not the special characters (and you will get a recursive `&`).
    – Sunyatasattva Oct 08 '13 at 05:07
  • yeah, its not big, it just seemed there might be be a more concise way to do it. thanks again. – 1252748 Oct 08 '13 at 05:11
  • PHP has a native function for that called `htmlentities`, but what it does is simply use a lookup table, which is the same thing you are doing here. You might want to abstract it as a function so you can reuse it obviously. – Sunyatasattva Oct 08 '13 at 05:18
  • yeah, that's a good call. I'll just make a call to a php script. – 1252748 Oct 08 '13 at 05:23