htmlentities
Version:
Encode and decode HTML entities with javascript
360 lines (341 loc) • 6.51 kB
JavaScript
/**
* entities.js v1.0.0
* @author Alex Duloz ~ @alexduloz ~ http://bitspushedaround.com/
* MIT license
*/
(function() {
var root = this;
//
// Tables / Maps
//
var tables = {};
//
// UTF-8
//
tables["utf8"] = {
" ": " ",
"¡": "¡",
"¢": "¢",
"£": "£",
"¤": "¤",
"¥": "¥",
"¦": "¦",
"§": "§",
"¨": "¨",
"©": "©",
"ª": "ª",
"«": "«",
"¬": "¬",
"": "­",
"®": "®",
"¯": "¯",
"°": "°",
"±": "±",
"²": "²",
"³": "³",
"´": "´",
"µ": "µ",
"¶": "¶",
"·": "·",
"¸": "¸",
"¹": "¹",
"º": "º",
"»": "»",
"¼": "¼",
"½": "½",
"¾": "¾",
"¿": "¿",
"À": "À",
"Á": "Á",
"Â": "Â",
"Ã": "Ã",
"Ä": "Ä",
"Å": "Å",
"Æ": "Æ",
"Ç": "Ç",
"È": "È",
"É": "É",
"Ê": "Ê",
"Ë": "Ë",
"Ì": "Ì",
"Í": "Í",
"Î": "Î",
"Ï": "Ï",
"Ð": "Ð",
"Ñ": "Ñ",
"Ò": "Ò",
"Ó": "Ó",
"Ô": "Ô",
"Õ": "Õ",
"Ö": "Ö",
"×": "×",
"Ø": "Ø",
"Ù": "Ù",
"Ú": "Ú",
"Û": "Û",
"Ü": "Ü",
"Ý": "Ý",
"Þ": "Þ",
"ß": "ß",
"à": "à",
"á": "á",
"â": "â",
"ã": "ã",
"ä": "ä",
"å": "å",
"æ": "æ",
"ç": "ç",
"è": "è",
"é": "é",
"ê": "ê",
"ë": "ë",
"ì": "ì",
"í": "í",
"î": "î",
"ï": "ï",
"ð": "ð",
"ñ": "ñ",
"ò": "ò",
"ó": "ó",
"ô": "ô",
"õ": "õ",
"ö": "ö",
"÷": "÷",
"ø": "ø",
"ù": "ù",
"ú": "ú",
"û": "û",
"ü": "ü",
"ý": "ý",
"þ": "þ",
"ÿ": "ÿ",
"Œ": "Œ",
"œ": "œ",
"Š": "Š",
"š": "š",
"Ÿ": "Ÿ",
"ƒ": "ƒ",
"ˆ": "ˆ",
"˜": "˜",
"Α": "Α",
"Β": "Β",
"Γ": "Γ",
"Δ": "Δ",
"Ε": "Ε",
"Ζ": "Ζ",
"Η": "Η",
"Θ": "Θ",
"Ι": "Ι",
"Κ": "Κ",
"Λ": "Λ",
"Μ": "Μ",
"Ν": "Ν",
"Ξ": "Ξ",
"Ο": "Ο",
"Π": "Π",
"Ρ": "Ρ",
"Σ": "Σ",
"Τ": "Τ",
"Υ": "Υ",
"Φ": "Φ",
"Χ": "Χ",
"Ψ": "Ψ",
"Ω": "Ω",
"α": "α",
"β": "β",
"γ": "γ",
"δ": "δ",
"ε": "ε",
"ζ": "ζ",
"η": "η",
"θ": "θ",
"ι": "ι",
"κ": "κ",
"λ": "λ",
"μ": "μ",
"ν": "ν",
"ξ": "ξ",
"ο": "ο",
"π": "π",
"ρ": "ρ",
"ς": "ς",
"σ": "σ",
"τ": "τ",
"υ": "υ",
"φ": "φ",
"χ": "χ",
"ψ": "ψ",
"ω": "ω",
"ϑ": "ϑ",
"ϒ": "ϒ",
"ϖ": "ϖ",
" ": " ",
" ": " ",
" ": " ",
"": "‌",
"": "‍",
"": "‎",
"": "‏",
"–": "–",
"—": "—",
"‘": "‘",
"’": "’",
"‚": "‚",
"“": "“",
"”": "”",
"„": "„",
"†": "†",
"‡": "‡",
"•": "•",
"…": "…",
"‰": "‰",
"′": "′",
"″": "″",
"‹": "‹",
"›": "›",
"‾": "‾",
"⁄": "⁄",
"€": "€",
"ℑ": "ℑ",
"℘": "℘",
"ℜ": "ℜ",
"™": "™",
"ℵ": "ℵ",
"←": "←",
"↑": "↑",
"→": "→",
"↓": "↓",
"↔": "↔",
"↵": "↵",
"⇐": "⇐",
"⇑": "⇑",
"⇒": "⇒",
"⇓": "⇓",
"⇔": "⇔",
"∀": "∀",
"∂": "∂",
"∃": "∃",
"∅": "∅",
"∇": "∇",
"∈": "∈",
"∉": "∉",
"∋": "∋",
"∏": "∏",
"∑": "∑",
"−": "−",
"∗": "∗",
"√": "√",
"∝": "∝",
"∞": "∞",
"∠": "∠",
"∧": "∧",
"∨": "∨",
"∩": "∩",
"∪": "∪",
"∫": "∫",
"∴": "∴",
"∼": "∼",
"≅": "≅",
"≈": "≈",
"≠": "≠",
"≡": "≡",
"≤": "≤",
"≥": "≥",
"⊂": "⊂",
"⊃": "⊃",
"⊄": "⊄",
"⊆": "⊆",
"⊇": "⊇",
"⊕": "⊕",
"⊗": "⊗",
"⊥": "⊥",
"⋅": "⋅",
"⌈": "⌈",
"⌉": "⌉",
"⌊": "⌊",
"⌋": "⌋",
"〈": "⟨",
"〉": "⟩",
"◊": "◊",
"♠": "♠",
"♣": "♣",
"♥": "♥",
"♦": "♦",
"&": "&",
'"': """,
"'": "'",
"<": "<",
">": ">",
};
//
// Helpers
//
function invert(table) {
var result = {};
for (var prop in table) {
result[table[prop]] = prop;
}
return result;
}
function keys(obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
};
//
// Used internally for replacements
//
var encodings = {};
var regexes = {};
for (var table in tables) {
encodings[table] = {
encode: tables[table],
decode: invert(tables[table])
};
regexes[table] = {
encode: new RegExp('[' + keys(encodings[table].encode).join('') + ']', 'g'),
decode: new RegExp('(' + keys(encodings[table].decode).join('|') + ')', 'g')
};
};
//
// Our plugin's methods
//
var methods = ["encode", "decode"];
//
// Implement methods
//
function implement(method) {
htmlentities[method] = function(string, encoding) {
if (string === null) {
return "";
}
var table = encoding || "utf8";
return ("" + string).replace(regexes[table][method], function(match) {
return encodings[table][method][match];
});
}
}
//
// Our actual plugin
//
htmlentities = {};
//
// Build it
//
for (var i = 0; i < methods.length; i++) {
implement(methods[i]);
};
//
// Server or client ?
//
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = htmlentities;
}
exports.htmlentities = htmlentities;
} else {
root.htmlentities = htmlentities;
}
}).call(this);