|
|
- 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 || !str.length) {
- 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 || !str.length) {
- 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) {
- if (!str || !str.length) {
- return '';
- }
- var strLength = str.length;
- 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) {
- if (!str || !str.length) {
- return '';
- }
- var strLenght = str.length;
- 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;
|