123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- var ALPHA_INDEX = {
- '<': '<',
- '>': '>',
- '"': '"',
- '&apos': '\'',
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- ''': '\'',
- '&': '&'
- };
- var CHAR_INDEX = {
- 60: 'lt',
- 62: 'gt',
- 34: 'quot',
- 39: 'apos',
- 38: 'amp'
- };
- var CHAR_S_INDEX = {
- '<': '<',
- '>': '>',
- '"': '"',
- '\'': ''',
- '&': '&'
- };
- /**
- * @constructor
- */
- function XmlEntities() {}
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.prototype.encode = function(str) {
- if (str.length === 0) {
- return '';
- }
- return str.replace(/<|>|"|'|&/g, function(s) {
- return CHAR_S_INDEX[s];
- });
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.encode = function(str) {
- return new XmlEntities().encode(str);
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.prototype.decode = function(str) {
- if (str.length === 0) {
- return '';
- }
- return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {
- if (s.charAt(1) === '#') {
- var code = s.charAt(2).toLowerCase() === 'x' ?
- parseInt(s.substr(3), 16) :
- parseInt(s.substr(2));
- if (isNaN(code) || code < -32768 || code > 65535) {
- return '';
- }
- return String.fromCharCode(code);
- }
- return ALPHA_INDEX[s] || s;
- });
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.decode = function(str) {
- return new XmlEntities().decode(str);
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.prototype.encodeNonUTF = function(str) {
- var strLength = str.length;
- if (strLength === 0) {
- return '';
- }
- var result = '';
- var i = 0;
- while (i < strLength) {
- var c = str.charCodeAt(i);
- var alpha = CHAR_INDEX[c];
- if (alpha) {
- result += "&" + alpha + ";";
- i++;
- continue;
- }
- if (c < 32 || c > 126) {
- result += '&#' + c + ';';
- } else {
- result += str.charAt(i);
- }
- i++;
- }
- return result;
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.encodeNonUTF = function(str) {
- return new XmlEntities().encodeNonUTF(str);
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.prototype.encodeNonASCII = function(str) {
- var strLenght = str.length;
- if (strLenght === 0) {
- return '';
- }
- var result = '';
- var i = 0;
- while (i < strLenght) {
- var c = str.charCodeAt(i);
- if (c <= 255) {
- result += str[i++];
- continue;
- }
- result += '&#' + c + ';';
- i++;
- }
- return result;
- };
- /**
- * @param {String} str
- * @returns {String}
- */
- XmlEntities.encodeNonASCII = function(str) {
- return new XmlEntities().encodeNonASCII(str);
- };
- module.exports = XmlEntities;
|