123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452 |
- (function($) {
- var default_immune = {
- 'js' : [',','.','_',' ']
- };
- var attr_whitelist_classes = {
- 'default': [',','.','-','_',' ']
- };
- var attr_whitelist = {
- 'width': ['%'],
- 'height': ['%']
- };
- var css_whitelist_classes = {
- 'default': ['-',' ','%'],
- 'color': ['#',' ','(',')'],
- 'image': ['(',')',':','/','?','&','-','.','"','=',' ']
- };
- var css_whitelist = {
- 'background': ['(',')',':','%','/','?','&','-',' ','.','"','=','#'],
- 'background-image': css_whitelist_classes['image'],
- 'background-color': css_whitelist_classes['color'],
- 'border-color': css_whitelist_classes['color'],
- 'border-image': css_whitelist_classes['image'],
- 'color': css_whitelist_classes['color'],
- 'icon': css_whitelist_classes['image'],
- 'list-style-image': css_whitelist_classes['image'],
- 'outline-color': css_whitelist_classes['color']
- };
-
-
-
-
-
- var unsafeKeys = {
-
-
- 'attr_name' : ['on[a-z]{1,}', 'style', 'href', 'src'],
-
- 'attr_val' : ['javascript:'],
-
- 'css_key' : ['behavior', '-moz-behavior', '-ms-behavior'],
- 'css_val' : ['expression']
- };
- var options = {
- blacklist: true
- };
- var hasBeenInitialized = false;
-
- $.encoder = {
- author: 'Chris Schmidt (chris.schmidt@owasp.org)',
- version: '${project.version}',
-
- init: function(opts) {
- if ( hasBeenInitialized )
- throw "jQuery Encoder has already been initialized - cannot set options after initialization";
- hasBeenInitialized = true;
- $.extend( options, opts );
- },
-
- encodeForHTML: function(input) {
- hasBeenInitialized = true;
- var div = document.createElement('div');
- $(div).text(input);
- return $(div).html();
- },
-
- encodeForHTMLAttribute: function(attr,input,omitAttributeName) {
- hasBeenInitialized = true;
-
- attr = $.encoder.canonicalize(attr).toLowerCase();
- input = $.encoder.canonicalize(input);
- if ( $.inArray(attr, unsafeKeys['attr_name']) >= 0 ) {
- throw "Unsafe attribute name used: " + attr;
- }
- for ( var a=0; a < unsafeKeys['attr_val']; a++ ) {
- if ( input.toLowerCase().match(unsafeKeys['attr_val'][a]) ) {
- throw "Unsafe attribute value used: " + input;
- }
- }
- immune = attr_whitelist[attr];
-
- if ( !immune ) immune = attr_whitelist_classes['default'];
- var encoded = '';
- if (!omitAttributeName) {
- for (var p = 0; p < attr.length; p++ ) {
- var pc = attr.charAt(p);
- if (!pc.match(/[a-zA-Z\-0-9]/)) {
- throw "Invalid attribute name specified";
- }
- encoded += pc;
- }
- encoded += '="';
- }
- for (var i = 0; i < input.length; i++) {
- var ch = input.charAt(i), cc = input.charCodeAt(i);
- if (!ch.match(/[a-zA-Z0-9]/) && $.inArray(ch, immune) < 0) {
- var hex = cc.toString(16);
- encoded += '&#x' + hex + ';';
- } else {
- encoded += ch;
- }
- }
- if (!omitAttributeName) {
- encoded += '"';
- }
- return encoded;
- },
-
- encodeForCSS: function(propName,input,omitPropertyName) {
- hasBeenInitialized = true;
-
- propName = $.encoder.canonicalize(propName).toLowerCase();
- input = $.encoder.canonicalize(input);
- if ( $.inArray(propName, unsafeKeys['css_key'] ) >= 0 ) {
- throw "Unsafe property name used: " + propName;
- }
- for ( var a=0; a < unsafeKeys['css_val'].length; a++ ) {
- if ( input.toLowerCase().indexOf(unsafeKeys['css_val'][a]) >= 0 ) {
- throw "Unsafe property value used: " + input;
- }
- }
- immune = css_whitelist[propName];
-
- if ( !immune ) immune = css_whitelist_classes['default'];
- var encoded = '';
- if (!omitPropertyName) {
- for (var p = 0; p < propName.length; p++) {
- var pc = propName.charAt(p);
- if (!pc.match(/[a-zA-Z\-]/)) {
- throw "Invalid Property Name specified";
- }
- encoded += pc;
- }
- encoded += ': ';
- }
- for (var i = 0; i < input.length; i++) {
- var ch = input.charAt(i), cc = input.charCodeAt(i);
- if (!ch.match(/[a-zA-Z0-9]/) && $.inArray(ch, immune) < 0) {
- var hex = cc.toString(16);
- var pad = '000000'.substr((hex.length));
- encoded += '\\' + pad + hex;
- } else {
- encoded += ch;
- }
- }
- return encoded;
- },
-
- encodeForURL: function(input,attr) {
- hasBeenInitialized = true;
- var encoded = '';
- if (attr) {
- if (attr.match(/^[A-Za-z\-0-9]{1,}$/)) {
- encoded += $.encoder.canonicalize(attr).toLowerCase();
- } else {
- throw "Illegal Attribute Name Specified";
- }
- encoded += '="';
- }
- encoded += encodeURIComponent(input);
- encoded += attr ? '"' : '';
- return encoded;
- },
-
- encodeForJavascript: function(input) {
- hasBeenInitialized = true;
- if ( !immune ) immune = default_immune['js'];
- var encoded = '';
- for (var i=0; i < input.length; i++ ) {
- var ch = input.charAt(i), cc = input.charCodeAt(i);
- if ($.inArray(ch, immune) >= 0 || hex[cc] == null ) {
- encoded += ch;
- continue;
- }
- var temp = cc.toString(16), pad;
- if ( cc < 256 ) {
- pad = '00'.substr(temp.length);
- encoded += '\\x' + pad + temp.toUpperCase();
- } else {
- pad = '0000'.substr(temp.length);
- encoded += '\\u' + pad + temp.toUpperCase();
- }
- }
- return encoded;
- },
-
- encodeForAlphaNumeric: function(input) {
- hasBeenInitialized = true;
- input = $.encoder.canonicalize(input);
- var encoded = '';
- for (var i = 0; i < input.length; i++) {
- var ch = input.charAt(i), cc = input.charCodeAt(i);
- if (!ch.match(/[a-zA-Z0-9-_]/)) {
- encoded += '_';
- } else {
- encoded += ch;
- }
- }
- return encoded;
- },
- canonicalize: function(input,strict) {
- hasBeenInitialized = true;
- if (input===null) return null;
- var out = input, cycle_out = input;
- var decodeCount = 0, cycles = 0;
- var codecs = [ new HTMLEntityCodec(), new PercentCodec(), new CSSCodec() ];
- while (true) {
- cycle_out = out;
- for (var i=0; i < codecs.length; i++ ) {
- var new_out = codecs[i].decode(out);
- if (new_out != out) {
- decodeCount++;
- out = new_out;
- }
- }
- if (cycle_out == out) {
- break;
- }
- cycles++;
- }
- if (strict && decodeCount > 1) {
- throw "Attack Detected - Multiple/Double Encodings used in input";
- }
- return out;
- }
- };
- var hex = [];
- for ( var c = 0; c < 0xFF; c++ ) {
- if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c >= 0x61 && c <= 0x7a ) {
- hex[c] = null;
- } else {
- hex[c] = c.toString(16);
- }
- }
- var methods = {
- html: function(opts) {
- return $.encoder.encodeForHTML(opts.unsafe);
- },
- css: function(opts) {
- var work = [];
- var out = [];
- if (opts.map) {
- work = opts.map;
- } else {
- work[opts.name] = opts.unsafe;
- }
- for (var k in work) {
- if ( !(typeof work[k] == 'function') && work.hasOwnProperty(k) ) {
- out[k] = $.encoder.encodeForCSS(k, work[k], true);
- }
- }
- return out;
- },
- attr: function(opts) {
- var work = [];
- var out = [];
- if (opts.map) {
- work = opts.map;
- } else {
- work[opts.name] = opts.unsafe;
- }
- for (var k in work) {
- if ( ! (typeof work[k] == 'function') && work.hasOwnProperty(k) ) {
- out[k] = $.encoder.encodeForHTMLAttribute(k,work[k],true);
- }
- }
- return out;
- }
- };
-
- $.fn.encode = function() {
- hasBeenInitialized = true;
- var argCount = arguments.length;
- var opts = {
- 'context' : 'html',
- 'unsafe' : null,
- 'name' : null,
- 'map' : null,
- 'setter' : null,
- 'strict' : true
- };
- if (argCount == 1 && typeof arguments[0] == 'object') {
- $.extend(opts, arguments[0]);
- } else {
- opts.context = arguments[0];
- if (arguments.length == 2) {
- if (opts.context == 'html') {
- opts.unsafe = arguments[1];
- }
- else if (opts.content == 'attr' || opts.content == 'css') {
- opts.map = arguments[1];
- }
- } else {
- opts.name = arguments[1];
- opts.unsafe = arguments[2];
- }
- }
- if (opts.context == 'html') {
- opts.setter = this.html;
- }
- else if (opts.context == 'css') {
- opts.setter = this.css;
- }
- else if (opts.context == 'attr') {
- opts.setter = this.attr;
- }
- return opts.setter.call(this, methods[opts.context].call(this, opts));
- };
-
- var PushbackString = Class.extend({
- _input: null,
- _pushback: null,
- _temp: null,
- _index: 0,
- _mark: 0,
- _hasNext: function() {
- if ( this._input == null ) return false;
- if ( this._input.length == 0 ) return false;
- return this._index < this._input.length;
- },
- init: function(input) {
- this._input = input;
- },
- pushback: function(c) {
- this._pushback = c;
- },
- index: function() {
- return this._index;
- },
- hasNext: function() {
- if ( this._pushback != null ) return true;
- return this._hasNext();
- },
- next: function() {
- if ( this._pushback != null ) {
- var save = this._pushback;
- this._pushback = null;
- return save;
- }
- return ( this._hasNext() ) ? this._input.charAt( this._index++ ) : null;
- },
- nextHex: function() {
- var c = this.next();
- if ( c == null ) return null;
- if ( c.match(/[0-9A-Fa-f]/) ) return c;
- return null;
- },
- peek: function(c) {
- if (c) {
- if ( this._pushback && this._pushback == c ) return true;
- return this._hasNext() ? this._input.charAt(this._index) == c : false;
- }
- if ( this._pushback ) return this._pushback;
- return this._hasNext() ? this._input.charAt(this._index) : null;
- },
- mark: function() {
- this._temp = this._pushback;
- this._mark = this._index;
- },
- reset: function() {
- this._pushback = this._temp;
- this._index = this._mark;
- },
- remainder: function() {
- var out = this._input.substr( this._index );
- if ( this._pushback != null ) {
- out = this._pushback + out;
- }
- return out;
- }
- });
-
- var Codec = Class.extend({
- decode: function(input) {
- var out = '', pbs = new PushbackString(input);
- while(pbs.hasNext()) {
- var c = this.decodeCharacter(pbs);
- if (c != null) {
- out += c;
- } else {
- out += pbs.next();
- }
- }
- return out;
- },
-
- decodeCharacter: function(pbs) {
- return pbs.next();
- }
- });
-
- var HTMLEntityCodec = Codec.extend({
- decodeCharacter: function(input) {
- input.mark();
- var first = input.next();
-
- if ( first == null || first != '&' ) {
- input.reset();
- return null;
- }
- var second = input.next();
- if ( second == null ) {
- input.reset();
- return null;
- }
- var c;
- if ( second == '#' ) {
- c = this._getNumericEntity(input);
- if ( c != null ) return c;
- } else if ( second.match(/[A-Za-z]/) ) {
- input.pushback(second);
- c = this._getNamedEntity(input);
- if ( c != null ) return c;
- }
- input.reset();
- return null;
- },
- _getNamedEntity: function(input) {
- var possible = '', entry, len;
- len = Math.min(input.remainder().length, ENTITY_TO_CHAR_TRIE.getMaxKeyLength());
- for(var i=0;i<len;i++) {
- possible += input.next().toLowerCase();
- }
- entry = ENTITY_TO_CHAR_TRIE.getLongestMatch(possible);
- if (entry == null)
- return null;
- input.reset();
- input.next();
- len = entry.getKey().length;
- for(var j=0;j<len;j++) {
- input.next();
- }
- if(input.peek(';'))
- input.next();
- return entry.getValue();
- },
- _getNumericEntity: function(input) {
- var first = input.peek();
- if ( first == null ) return null;
- if (first == 'x' || first == 'X' ) {
- input.next();
- return this._parseHex(input);
- }
- return this._parseNumber(input);
- },
- _parseHex: function(input) {
- var out = '';
- while (input.hasNext()) {
- var c = input.peek();
- if ( !isNaN( parseInt(c, 16) ) ) {
- out += c;
- input.next();
- } else if ( c == ';' ) {
- input.next();
- break;
- } else {
- break;
- }
- }
- var i = parseInt(out,16);
- if ( !isNaN(i) && isValidCodePoint(i) ) return String.fromCharCode(i);
- return null;
- },
- _parseNumber: function(input) {
- var out = '';
- while (input.hasNext()) {
- var ch = input.peek();
- if ( !isNaN( parseInt(ch,10) ) ) {
- out += ch;
- input.next();
- } else if ( ch == ';' ) {
- input.next();
- break;
- } else {
- break;
- }
- }
- var i = parseInt(out,10);
- if ( !isNaN(i) && isValidCodePoint(i) ) return String.fromCharCode(i);
- return null;
- }
- });
-
- var PercentCodec = Codec.extend({
- decodeCharacter: function(input) {
- input.mark();
- var first = input.next();
- if ( first == null ) {
- input.reset();
- return null;
- }
- if ( first != '%' ) {
- input.reset();
- return null;
- }
- var out = '';
- for (var i=0;i<2;i++) {
- var c = input.nextHex();
- if( c != null ) out += c;
- }
- if (out.length == 2) {
- var p = parseInt(out, 16);
- if ( isValidCodePoint(p) )
- return String.fromCharCode(p);
- }
- input.reset();
- return null;
- }
- });
-
- var CSSCodec = Codec.extend({
- decodeCharacter: function(input) {
- input.mark();
- var first = input.next();
- if (first==null || first != '\\') {
- input.reset();
- return null;
- }
- var second = input.next();
- if (second==null) {
- input.reset();
- return null;
- }
-
-
- switch(second) {
- case '\r':
- if (input.peek('\n')) {
- input.next();
- }
- case '\n':
- case '\f':
- case '\u0000':
- return this.decodeCharacter(input);
- }
- if ( parseInt(second,16) == 'NaN' ) {
- return second;
- }
- var out = second;
- for(var j=0;j<5;j++) {
- var c = input.next();
- if (c==null || isWhiteSpace(c)) {
- break;
- }
- if (parseInt(c,16) != 'NaN') {
- out += c;
- } else {
- input.pushback(c);
- break;
- }
- }
- var p = parseInt(out,16);
- if (isValidCodePoint(p))
- return String.fromCharCode(p);
- return '\ufffd';
- }
- });
-
- var Trie = Class.extend({
- root: null,
- maxKeyLen: 0,
- size: 0,
- init: function() { this.clear(); },
- getLongestMatch: function(key) {
- return ( this.root == null && key == null ) ? null : this.root.getLongestMatch(key,0);
- },
- getMaxKeyLength: function() { return this.maxKeyLen; },
- clear: function() { this.root = null, this.maxKeyLen = 0, this.size = 0; },
- put: function(key,val) {
- var len, old;
- if (this.root==null)
- this.root = new Trie.Node();
- if ((old=this.root.put(key,0,val))!=null)
- return old;
- if ((len=key.length) > this.maxKeyLen )
- this.maxKeyLen=key.length;
- this.size++;
- return null;
- }
- });
- Trie.Entry = Class.extend({
- _key: null,
- _value: null,
- init: function(key,value) { this._key = key, this._value = value; },
- getKey: function() { return this._key; },
- getValue: function() { return this._value; },
- equals: function(other) {
- if ( !(other instanceof Trie.Entry) ) {
- return false;
- }
- return this._key == other._key && this._value == other._value;
- }
- });
- Trie.Node = Class.extend({
- _value: null,
- _nextMap: null,
- setValue: function(value) { this._value = value; },
- getNextNode: function(ch) {
- if ( !this._nextMap ) return null;
- return this._nextMap[ch];
- },
-
- put: function(key,pos,value) {
- var nextNode, ch, old;
-
- if (key.length == pos) {
- old = this._value;
- this.setValue(value);
- return old;
- }
- ch = key.charAt(pos);
- if (this._nextMap==null) {
- this._nextMap = Trie.Node.newNodeMap();
- nextNode = new Trie.Node();
- this._nextMap[ch] = nextNode;
- } else if ((nextNode=this._nextMap[ch]) == null) {
- nextNode = new Trie.Node();
- this._nextMap[ch] = nextNode;
- }
- return nextNode.put(key,pos+1,value);
- },
-
- get: function(key,pos) {
- var nextNode;
- if (key.length <= pos)
- return this._value;
- if ((nextNode=this.getNextNode(key.charAt(pos))) == null)
- return null;
- return nextNode.get(key,pos+1);
- },
-
- getLongestMatch: function(key,pos) {
- var nextNode, ret;
- if (key.length <= pos) {
- return Trie.Entry.newInstanceIfNeeded(key,this._value);
- }
- if ((nextNode=this.getNextNode(key.charAt(pos)))==null) {
-
- return Trie.Entry.newInstanceIfNeeded(key,pos,this._value);
- }
- if ((ret=nextNode.getLongestMatch(key,pos+1))!=null) {
- return ret;
- }
- return Trie.Entry.newInstanceIfNeeded(key,pos,this._value);
- }
- });
- Trie.Entry.newInstanceIfNeeded = function() {
- var key = arguments[0], value, keyLength;
- if ( typeof arguments[1] == 'string' ) {
- value = arguments[1];
- keyLength = key.length;
- } else {
- keyLength = arguments[1];
- value = arguments[2];
- }
- if (value==null || key==null) {
- return null;
- }
- if (key.length > keyLength) {
- key = key.substr(0,keyLength);
- }
- return new Trie.Entry(key,value);
- };
- Trie.Node.newNodeMap = function() {
- return {};
- };
-
- var isValidCodePoint = function(codepoint) {
- return codepoint >= 0x0000 && codepoint <= 0x10FFFF;
- };
-
- var isWhiteSpace = function(input) {
- return input.match(/[\s]/);
- };
-
- var MAP_ENTITY_TO_CHAR = [];
- var MAP_CHAR_TO_ENTITY = [];
- var ENTITY_TO_CHAR_TRIE = new Trie();
- (function(){
- MAP_ENTITY_TO_CHAR["""] = "34";
-
- MAP_ENTITY_TO_CHAR["&"] = "38";
-
- MAP_ENTITY_TO_CHAR["<"] = "60";
-
- MAP_ENTITY_TO_CHAR[">"] = "62";
-
- MAP_ENTITY_TO_CHAR[" "] = "160";
-
- MAP_ENTITY_TO_CHAR["¡"] = "161";
-
- MAP_ENTITY_TO_CHAR["¢"] = "162";
-
- MAP_ENTITY_TO_CHAR["£"] = "163";
-
- MAP_ENTITY_TO_CHAR["¤"] = "164";
-
- MAP_ENTITY_TO_CHAR["¥"] = "165";
-
- MAP_ENTITY_TO_CHAR["¦"] = "166";
-
- MAP_ENTITY_TO_CHAR["§"] = "167";
-
- MAP_ENTITY_TO_CHAR["¨"] = "168";
-
- MAP_ENTITY_TO_CHAR["©"] = "169";
-
- MAP_ENTITY_TO_CHAR["ª"] = "170";
-
- MAP_ENTITY_TO_CHAR["«"] = "171";
-
- MAP_ENTITY_TO_CHAR["¬"] = "172";
-
- MAP_ENTITY_TO_CHAR["­"] = "173";
-
- MAP_ENTITY_TO_CHAR["®"] = "174";
-
- MAP_ENTITY_TO_CHAR["¯"] = "175";
-
- MAP_ENTITY_TO_CHAR["°"] = "176";
-
- MAP_ENTITY_TO_CHAR["±"] = "177";
-
- MAP_ENTITY_TO_CHAR["²"] = "178";
-
- MAP_ENTITY_TO_CHAR["³"] = "179";
-
- MAP_ENTITY_TO_CHAR["´"] = "180";
-
- MAP_ENTITY_TO_CHAR["µ"] = "181";
-
- MAP_ENTITY_TO_CHAR["¶"] = "182";
-
- MAP_ENTITY_TO_CHAR["·"] = "183";
-
- MAP_ENTITY_TO_CHAR["¸"] = "184";
-
- MAP_ENTITY_TO_CHAR["¹"] = "185";
-
- MAP_ENTITY_TO_CHAR["º"] = "186";
-
- MAP_ENTITY_TO_CHAR["»"] = "187";
-
- MAP_ENTITY_TO_CHAR["¼"] = "188";
-
- MAP_ENTITY_TO_CHAR["½"] = "189";
-
- MAP_ENTITY_TO_CHAR["¾"] = "190";
-
- MAP_ENTITY_TO_CHAR["¿"] = "191";
-
- MAP_ENTITY_TO_CHAR["À"] = "192";
-
- MAP_ENTITY_TO_CHAR["Á"] = "193";
-
- MAP_ENTITY_TO_CHAR["Â"] = "194";
-
- MAP_ENTITY_TO_CHAR["Ã"] = "195";
-
- MAP_ENTITY_TO_CHAR["Ä"] = "196";
-
- MAP_ENTITY_TO_CHAR["Å"] = "197";
-
- MAP_ENTITY_TO_CHAR["Æ"] = "198";
-
- MAP_ENTITY_TO_CHAR["Ç"] = "199";
-
- MAP_ENTITY_TO_CHAR["È"] = "200";
-
- MAP_ENTITY_TO_CHAR["É"] = "201";
-
- MAP_ENTITY_TO_CHAR["Ê"] = "202";
-
- MAP_ENTITY_TO_CHAR["Ë"] = "203";
-
- MAP_ENTITY_TO_CHAR["Ì"] = "204";
-
- MAP_ENTITY_TO_CHAR["Í"] = "205";
-
- MAP_ENTITY_TO_CHAR["Î"] = "206";
-
- MAP_ENTITY_TO_CHAR["Ï"] = "207";
-
- MAP_ENTITY_TO_CHAR["Ð"] = "208";
-
- MAP_ENTITY_TO_CHAR["Ñ"] = "209";
-
- MAP_ENTITY_TO_CHAR["Ò"] = "210";
-
- MAP_ENTITY_TO_CHAR["Ó"] = "211";
-
- MAP_ENTITY_TO_CHAR["Ô"] = "212";
-
- MAP_ENTITY_TO_CHAR["Õ"] = "213";
-
- MAP_ENTITY_TO_CHAR["Ö"] = "214";
-
- MAP_ENTITY_TO_CHAR["×"] = "215";
-
- MAP_ENTITY_TO_CHAR["Ø"] = "216";
-
- MAP_ENTITY_TO_CHAR["Ù"] = "217";
-
- MAP_ENTITY_TO_CHAR["Ú"] = "218";
-
- MAP_ENTITY_TO_CHAR["Û"] = "219";
-
- MAP_ENTITY_TO_CHAR["Ü"] = "220";
-
- MAP_ENTITY_TO_CHAR["Ý"] = "221";
-
- MAP_ENTITY_TO_CHAR["Þ"] = "222";
-
- MAP_ENTITY_TO_CHAR["ß"] = "223";
-
- MAP_ENTITY_TO_CHAR["à"] = "224";
-
- MAP_ENTITY_TO_CHAR["á"] = "225";
-
- MAP_ENTITY_TO_CHAR["â"] = "226";
-
- MAP_ENTITY_TO_CHAR["ã"] = "227";
-
- MAP_ENTITY_TO_CHAR["ä"] = "228";
-
- MAP_ENTITY_TO_CHAR["å"] = "229";
-
- MAP_ENTITY_TO_CHAR["æ"] = "230";
-
- MAP_ENTITY_TO_CHAR["ç"] = "231";
-
- MAP_ENTITY_TO_CHAR["è"] = "232";
-
- MAP_ENTITY_TO_CHAR["é"] = "233";
-
- MAP_ENTITY_TO_CHAR["ê"] = "234";
-
- MAP_ENTITY_TO_CHAR["ë"] = "235";
-
- MAP_ENTITY_TO_CHAR["ì"] = "236";
-
- MAP_ENTITY_TO_CHAR["í"] = "237";
-
- MAP_ENTITY_TO_CHAR["î"] = "238";
-
- MAP_ENTITY_TO_CHAR["ï"] = "239";
-
- MAP_ENTITY_TO_CHAR["ð"] = "240";
-
- MAP_ENTITY_TO_CHAR["ñ"] = "241";
-
- MAP_ENTITY_TO_CHAR["ò"] = "242";
-
- MAP_ENTITY_TO_CHAR["ó"] = "243";
-
- MAP_ENTITY_TO_CHAR["ô"] = "244";
-
- MAP_ENTITY_TO_CHAR["õ"] = "245";
-
- MAP_ENTITY_TO_CHAR["ö"] = "246";
-
- MAP_ENTITY_TO_CHAR["÷"] = "247";
-
- MAP_ENTITY_TO_CHAR["ø"] = "248";
-
- MAP_ENTITY_TO_CHAR["ù"] = "249";
-
- MAP_ENTITY_TO_CHAR["ú"] = "250";
-
- MAP_ENTITY_TO_CHAR["û"] = "251";
-
- MAP_ENTITY_TO_CHAR["ü"] = "252";
-
- MAP_ENTITY_TO_CHAR["ý"] = "253";
-
- MAP_ENTITY_TO_CHAR["þ"] = "254";
-
- MAP_ENTITY_TO_CHAR["ÿ"] = "255";
-
- MAP_ENTITY_TO_CHAR["&OElig"] = "338";
-
- MAP_ENTITY_TO_CHAR["&oelig"] = "339";
-
- MAP_ENTITY_TO_CHAR["&Scaron"] = "352";
-
- MAP_ENTITY_TO_CHAR["&scaron"] = "353";
-
- MAP_ENTITY_TO_CHAR["&Yuml"] = "376";
-
- MAP_ENTITY_TO_CHAR["&fnof"] = "402";
-
- MAP_ENTITY_TO_CHAR["&circ"] = "710";
-
- MAP_ENTITY_TO_CHAR["&tilde"] = "732";
-
- MAP_ENTITY_TO_CHAR["&Alpha"] = "913";
-
- MAP_ENTITY_TO_CHAR["&Beta"] = "914";
-
- MAP_ENTITY_TO_CHAR["&Gamma"] = "915";
-
- MAP_ENTITY_TO_CHAR["&Delta"] = "916";
-
- MAP_ENTITY_TO_CHAR["&Epsilon"] = "917";
-
- MAP_ENTITY_TO_CHAR["&Zeta"] = "918";
-
- MAP_ENTITY_TO_CHAR["&Eta"] = "919";
-
- MAP_ENTITY_TO_CHAR["&Theta"] = "920";
-
- MAP_ENTITY_TO_CHAR["&Iota"] = "921";
-
- MAP_ENTITY_TO_CHAR["&Kappa"] = "922";
-
- MAP_ENTITY_TO_CHAR["&Lambda"] = "923";
-
- MAP_ENTITY_TO_CHAR["&Mu"] = "924";
-
- MAP_ENTITY_TO_CHAR["&Nu"] = "925";
-
- MAP_ENTITY_TO_CHAR["&Xi"] = "926";
-
- MAP_ENTITY_TO_CHAR["&Omicron"] = "927";
-
- MAP_ENTITY_TO_CHAR["&Pi"] = "928";
-
- MAP_ENTITY_TO_CHAR["&Rho"] = "929";
-
- MAP_ENTITY_TO_CHAR["&Sigma"] = "931";
-
- MAP_ENTITY_TO_CHAR["&Tau"] = "932";
-
- MAP_ENTITY_TO_CHAR["&Upsilon"] = "933";
-
- MAP_ENTITY_TO_CHAR["&Phi"] = "934";
-
- MAP_ENTITY_TO_CHAR["&Chi"] = "935";
-
- MAP_ENTITY_TO_CHAR["&Psi"] = "936";
-
- MAP_ENTITY_TO_CHAR["&Omega"] = "937";
-
- MAP_ENTITY_TO_CHAR["&alpha"] = "945";
-
- MAP_ENTITY_TO_CHAR["&beta"] = "946";
-
- MAP_ENTITY_TO_CHAR["&gamma"] = "947";
-
- MAP_ENTITY_TO_CHAR["&delta"] = "948";
-
- MAP_ENTITY_TO_CHAR["&epsilon"] = "949";
-
- MAP_ENTITY_TO_CHAR["&zeta"] = "950";
-
- MAP_ENTITY_TO_CHAR["&eta"] = "951";
-
- MAP_ENTITY_TO_CHAR["&theta"] = "952";
-
- MAP_ENTITY_TO_CHAR["&iota"] = "953";
-
- MAP_ENTITY_TO_CHAR["&kappa"] = "954";
-
- MAP_ENTITY_TO_CHAR["&lambda"] = "955";
-
- MAP_ENTITY_TO_CHAR["&mu"] = "956";
-
- MAP_ENTITY_TO_CHAR["&nu"] = "957";
-
- MAP_ENTITY_TO_CHAR["&xi"] = "958";
-
- MAP_ENTITY_TO_CHAR["&omicron"] = "959";
-
- MAP_ENTITY_TO_CHAR["&pi"] = "960";
-
- MAP_ENTITY_TO_CHAR["&rho"] = "961";
-
- MAP_ENTITY_TO_CHAR["&sigmaf"] = "962";
-
- MAP_ENTITY_TO_CHAR["&sigma"] = "963";
-
- MAP_ENTITY_TO_CHAR["&tau"] = "964";
-
- MAP_ENTITY_TO_CHAR["&upsilon"] = "965";
-
- MAP_ENTITY_TO_CHAR["&phi"] = "966";
-
- MAP_ENTITY_TO_CHAR["&chi"] = "967";
-
- MAP_ENTITY_TO_CHAR["&psi"] = "968";
-
- MAP_ENTITY_TO_CHAR["&omega"] = "969";
-
- MAP_ENTITY_TO_CHAR["&thetasym"] = "977";
-
- MAP_ENTITY_TO_CHAR["&upsih"] = "978";
-
- MAP_ENTITY_TO_CHAR["&piv"] = "982";
-
- MAP_ENTITY_TO_CHAR["&ensp"] = "8194";
-
- MAP_ENTITY_TO_CHAR["&emsp"] = "8195";
-
- MAP_ENTITY_TO_CHAR["&thinsp"] = "8201";
-
- MAP_ENTITY_TO_CHAR["&zwnj"] = "8204";
-
- MAP_ENTITY_TO_CHAR["&zwj"] = "8205";
-
- MAP_ENTITY_TO_CHAR["&lrm"] = "8206";
-
- MAP_ENTITY_TO_CHAR["&rlm"] = "8207";
-
- MAP_ENTITY_TO_CHAR["&ndash"] = "8211";
-
- MAP_ENTITY_TO_CHAR["&mdash"] = "8212";
-
- MAP_ENTITY_TO_CHAR["&lsquo"] = "8216";
-
- MAP_ENTITY_TO_CHAR["&rsquo"] = "8217";
-
- MAP_ENTITY_TO_CHAR["&sbquo"] = "8218";
-
- MAP_ENTITY_TO_CHAR["&ldquo"] = "8220";
-
- MAP_ENTITY_TO_CHAR["&rdquo"] = "8221";
-
- MAP_ENTITY_TO_CHAR["&bdquo"] = "8222";
-
- MAP_ENTITY_TO_CHAR["&dagger"] = "8224";
-
- MAP_ENTITY_TO_CHAR["&Dagger"] = "8225";
-
- MAP_ENTITY_TO_CHAR["&bull"] = "8226";
-
- MAP_ENTITY_TO_CHAR["&hellip"] = "8230";
-
- MAP_ENTITY_TO_CHAR["&permil"] = "8240";
-
- MAP_ENTITY_TO_CHAR["&prime"] = "8242";
-
- MAP_ENTITY_TO_CHAR["&Prime"] = "8243";
-
- MAP_ENTITY_TO_CHAR["&lsaquo"] = "8249";
-
- MAP_ENTITY_TO_CHAR["&rsaquo"] = "8250";
-
- MAP_ENTITY_TO_CHAR["&oline"] = "8254";
-
- MAP_ENTITY_TO_CHAR["&frasl"] = "8260";
-
- MAP_ENTITY_TO_CHAR["&euro"] = "8364";
-
- MAP_ENTITY_TO_CHAR["&image"] = "8365";
-
- MAP_ENTITY_TO_CHAR["&weierp"] = "8472";
-
- MAP_ENTITY_TO_CHAR["&real"] = "8476";
-
- MAP_ENTITY_TO_CHAR["&trade"] = "8482";
-
- MAP_ENTITY_TO_CHAR["&alefsym"] = "8501";
-
- MAP_ENTITY_TO_CHAR["&larr"] = "8592";
-
- MAP_ENTITY_TO_CHAR["&uarr"] = "8593";
-
- MAP_ENTITY_TO_CHAR["&rarr"] = "8594";
-
- MAP_ENTITY_TO_CHAR["&darr"] = "8595";
-
- MAP_ENTITY_TO_CHAR["&harr"] = "8596";
-
- MAP_ENTITY_TO_CHAR["&crarr"] = "8629";
-
- MAP_ENTITY_TO_CHAR["&lArr"] = "8656";
-
- MAP_ENTITY_TO_CHAR["&uArr"] = "8657";
-
- MAP_ENTITY_TO_CHAR["&rArr"] = "8658";
-
- MAP_ENTITY_TO_CHAR["&dArr"] = "8659";
-
- MAP_ENTITY_TO_CHAR["&hArr"] = "8660";
-
- MAP_ENTITY_TO_CHAR["&forall"] = "8704";
-
- MAP_ENTITY_TO_CHAR["&part"] = "8706";
-
- MAP_ENTITY_TO_CHAR["&exist"] = "8707";
-
- MAP_ENTITY_TO_CHAR["&empty"] = "8709";
-
- MAP_ENTITY_TO_CHAR["&nabla"] = "8711";
-
- MAP_ENTITY_TO_CHAR["&isin"] = "8712";
-
- MAP_ENTITY_TO_CHAR["¬in"] = "8713";
-
- MAP_ENTITY_TO_CHAR["&ni"] = "8715";
-
- MAP_ENTITY_TO_CHAR["&prod"] = "8719";
-
- MAP_ENTITY_TO_CHAR["&sum"] = "8721";
-
- MAP_ENTITY_TO_CHAR["&minus"] = "8722";
-
- MAP_ENTITY_TO_CHAR["&lowast"] = "8727";
-
- MAP_ENTITY_TO_CHAR["&radic"] = "8730";
-
- MAP_ENTITY_TO_CHAR["&prop"] = "8733";
-
- MAP_ENTITY_TO_CHAR["&infin"] = "8734";
-
- MAP_ENTITY_TO_CHAR["&ang"] = "8736";
-
- MAP_ENTITY_TO_CHAR["&and"] = "8743";
-
- MAP_ENTITY_TO_CHAR["&or"] = "8744";
-
- MAP_ENTITY_TO_CHAR["&cap"] = "8745";
-
- MAP_ENTITY_TO_CHAR["&cup"] = "8746";
-
- MAP_ENTITY_TO_CHAR["&int"] = "8747";
-
- MAP_ENTITY_TO_CHAR["&there4"] = "8756";
-
- MAP_ENTITY_TO_CHAR["&sim"] = "8764";
-
- MAP_ENTITY_TO_CHAR["&cong"] = "8773";
-
- MAP_ENTITY_TO_CHAR["&asymp"] = "8776";
-
- MAP_ENTITY_TO_CHAR["&ne"] = "8800";
-
- MAP_ENTITY_TO_CHAR["&equiv"] = "8801";
-
- MAP_ENTITY_TO_CHAR["&le"] = "8804";
-
- MAP_ENTITY_TO_CHAR["&ge"] = "8805";
-
- MAP_ENTITY_TO_CHAR["&sub"] = "8834";
-
- MAP_ENTITY_TO_CHAR["&sup"] = "8835";
-
- MAP_ENTITY_TO_CHAR["&nsub"] = "8836";
-
- MAP_ENTITY_TO_CHAR["&sube"] = "8838";
-
- MAP_ENTITY_TO_CHAR["&supe"] = "8839";
-
- MAP_ENTITY_TO_CHAR["&oplus"] = "8853";
-
- MAP_ENTITY_TO_CHAR["&otimes"] = "8855";
-
- MAP_ENTITY_TO_CHAR["&perp"] = "8869";
-
- MAP_ENTITY_TO_CHAR["&sdot"] = "8901";
-
- MAP_ENTITY_TO_CHAR["&lceil"] = "8968";
-
- MAP_ENTITY_TO_CHAR["&rceil"] = "8969";
-
- MAP_ENTITY_TO_CHAR["&lfloor"] = "8970";
-
- MAP_ENTITY_TO_CHAR["&rfloor"] = "8971";
-
- MAP_ENTITY_TO_CHAR["&lang"] = "9001";
-
- MAP_ENTITY_TO_CHAR["&rang"] = "9002";
-
- MAP_ENTITY_TO_CHAR["&loz"] = "9674";
-
- MAP_ENTITY_TO_CHAR["&spades"] = "9824";
-
- MAP_ENTITY_TO_CHAR["&clubs"] = "9827";
-
- MAP_ENTITY_TO_CHAR["&hearts"] = "9829";
-
- MAP_ENTITY_TO_CHAR["&diams"] = "9830";
-
- for (var entity in MAP_ENTITY_TO_CHAR) {
- if ( !(typeof MAP_ENTITY_TO_CHAR[entity] == 'function') && MAP_ENTITY_TO_CHAR.hasOwnProperty(entity) ) {
- MAP_CHAR_TO_ENTITY[MAP_ENTITY_TO_CHAR[entity]] = entity;
- }
- }
- for (var c in MAP_CHAR_TO_ENTITY) {
- if ( !(typeof MAP_CHAR_TO_ENTITY[c] == 'function') && MAP_CHAR_TO_ENTITY.hasOwnProperty(c) ) {
- var ent = MAP_CHAR_TO_ENTITY[c].toLowerCase().substr(1);
- ENTITY_TO_CHAR_TRIE.put(ent,String.fromCharCode(c));
- }
- }
- })();
-
- if ( Object.freeze ) {
- $.encoder = Object.freeze($.encoder);
- $.fn.encode = Object.freeze($.fn.encode);
- } else if ( Object.seal ) {
- $.encoder = Object.seal($.encoder);
- $.fn.encode = Object.seal($.fn.encode);
- } else if ( Object.preventExtensions ) {
- $.encoder = Object.preventExtensions($.encoder);
- $.fn.encode = Object.preventExtensions($.fn.encode);
- }
- })(jQuery);
|