无法反转此HTML实体转换功能

时间:2013-10-08 04:13:28

标签: javascript jquery

代码here适用于将特殊字符转换为HTML实体。

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

无论如何,我可以反转这个对象的键值对来翻译另一种方式吗?

似乎我应该可以做这样的事情,但我对如何扭转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/

我包含了jQuery标记,以防有一种使用jQuery实现这一点的非常简单的方法

1 个答案:

答案 0 :(得分:1)

你可以对你的对象进行反向查找,但是使用jQuery你可以使用一个小技巧来解码这些字符,如下所示:

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

基本上你是通过jQuery创建一个虚拟div元素,用你的编码实体填充它,然后检索元素的text node,从而将它分配给textarea的值。 / p>

Working example