function htmlentities (string, quote_style, charset, double_encode) {    // http://kevin.vanzonneveld.net    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // +   improved by: nobbler    // +    tweaked by: Jack    // +   bugfixed by: Onno Marsman    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)    // +      input by: Ratheous    // +   improved by: Rafał Kukawski (http://blog.kukawski.pl)    // -    depends on: get_html_translation_table    // *     example 1: htmlentities('Kevin & van Zonneveld');    // *     returns 1: 'Kevin &amp; van Zonneveld'    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");    // *     returns 2: 'foo&#039;bar'    var hash_map = {},        symbol = '',        entity = '',        self = this;    string += '';    double_encode = !!double_encode || double_encode == null;    if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {        return false;    }    hash_map["'"] = '&#039;';        if (double_encode) {        for (symbol in hash_map) {            entity = hash_map[symbol];            string = string.split(symbol).join(entity);        }    } else {        string = string.replace(/([\s\S]*?)(&(?:#\d+|#x[\da-f]+|[a-z][\da-z]*);|$)/g, function (ignore, text, entity) {            return self.htmlentities(text, quote_style, charset) + entity;        });    }    return string;}
