htmlencode.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. * [js-htmlencode]{@link https://github.com/emn178/js-htmlencode}
  3. *
  4. * @version 0.3.0
  5. * @author Chen, Yi-Cyuan [emn178@gmail.com]
  6. * @copyright Chen, Yi-Cyuan 2014-2017
  7. * @license MIT
  8. */
  9. /*jslint bitwise: true */
  10. (function () {
  11. 'use strict';
  12. var root = typeof window === 'object' ? window : {};
  13. var NODE_JS = !root.JS_HTMLENCODE_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
  14. if (NODE_JS) {
  15. root = global;
  16. }
  17. var COMMON_JS = !root.JS_HTMLENCODE_NO_COMMON_JS && typeof module === 'object' && module.exports;
  18. var AMD = typeof define === 'function' && define.amd;
  19. var HTML_ENTITIES = {
  20. ' ' : '\u00A0',
  21. '¡' : '\u00A1',
  22. '¢' : '\u00A2',
  23. '£' : '\u00A3',
  24. '¤' : '\u00A4',
  25. '¥' : '\u00A5',
  26. '¦' : '\u00A6',
  27. '§' : '\u00A7',
  28. '¨' : '\u00A8',
  29. '©' : '\u00A9',
  30. 'ª' : '\u00AA',
  31. '«' : '\u00AB',
  32. '¬' : '\u00AC',
  33. '­' : '\u00AD',
  34. '®' : '\u00AE',
  35. '¯' : '\u00AF',
  36. '°' : '\u00B0',
  37. '±' : '\u00B1',
  38. '²' : '\u00B2',
  39. '³' : '\u00B3',
  40. '´' : '\u00B4',
  41. 'µ' : '\u00B5',
  42. '¶' : '\u00B6',
  43. '·' : '\u00B7',
  44. '¸' : '\u00B8',
  45. '¹' : '\u00B9',
  46. 'º' : '\u00BA',
  47. '»' : '\u00BB',
  48. '¼' : '\u00BC',
  49. '½' : '\u00BD',
  50. '¾' : '\u00BE',
  51. '¿' : '\u00BF',
  52. 'À' : '\u00C0',
  53. 'Á' : '\u00C1',
  54. 'Â' : '\u00C2',
  55. 'Ã' : '\u00C3',
  56. 'Ä' : '\u00C4',
  57. 'Å' : '\u00C5',
  58. 'Æ' : '\u00C6',
  59. 'Ç' : '\u00C7',
  60. 'È' : '\u00C8',
  61. 'É' : '\u00C9',
  62. 'Ê' : '\u00CA',
  63. 'Ë' : '\u00CB',
  64. 'Ì' : '\u00CC',
  65. 'Í' : '\u00CD',
  66. 'Î' : '\u00CE',
  67. 'Ï' : '\u00CF',
  68. 'Ð' : '\u00D0',
  69. 'Ñ' : '\u00D1',
  70. 'Ò' : '\u00D2',
  71. 'Ó' : '\u00D3',
  72. 'Ô' : '\u00D4',
  73. 'Õ' : '\u00D5',
  74. 'Ö' : '\u00D6',
  75. '×' : '\u00D7',
  76. 'Ø' : '\u00D8',
  77. 'Ù' : '\u00D9',
  78. 'Ú' : '\u00DA',
  79. 'Û' : '\u00DB',
  80. 'Ü' : '\u00DC',
  81. 'Ý' : '\u00DD',
  82. 'Þ' : '\u00DE',
  83. 'ß' : '\u00DF',
  84. 'à' : '\u00E0',
  85. 'á' : '\u00E1',
  86. 'â' : '\u00E2',
  87. 'ã' : '\u00E3',
  88. 'ä' : '\u00E4',
  89. 'å' : '\u00E5',
  90. 'æ' : '\u00E6',
  91. 'ç' : '\u00E7',
  92. 'è' : '\u00E8',
  93. 'é' : '\u00E9',
  94. 'ê' : '\u00EA',
  95. 'ë' : '\u00EB',
  96. 'ì' : '\u00EC',
  97. 'í' : '\u00ED',
  98. 'î' : '\u00EE',
  99. 'ï' : '\u00EF',
  100. 'ð' : '\u00F0',
  101. 'ñ' : '\u00F1',
  102. 'ò' : '\u00F2',
  103. 'ó' : '\u00F3',
  104. 'ô' : '\u00F4',
  105. 'õ' : '\u00F5',
  106. 'ö' : '\u00F6',
  107. '÷' : '\u00F7',
  108. 'ø' : '\u00F8',
  109. 'ù' : '\u00F9',
  110. 'ú' : '\u00FA',
  111. 'û' : '\u00FB',
  112. 'ü' : '\u00FC',
  113. 'ý' : '\u00FD',
  114. 'þ' : '\u00FE',
  115. 'ÿ' : '\u00FF',
  116. '"' : '\u0022',
  117. '&' : '\u0026',
  118. '<' : '\u003C',
  119. '>' : '\u003E',
  120. ''' : '\u0027',
  121. 'Œ' : '\u0152',
  122. 'œ' : '\u0153',
  123. 'Š' : '\u0160',
  124. 'š' : '\u0161',
  125. 'Ÿ' : '\u0178',
  126. 'ˆ' : '\u02C6',
  127. '˜' : '\u02DC',
  128. ' ' : '\u2002',
  129. ' ' : '\u2003',
  130. ' ' : '\u2009',
  131. '‌' : '\u200C',
  132. '‍' : '\u200D',
  133. '‎' : '\u200E',
  134. '‏' : '\u200F',
  135. '–' : '\u2013',
  136. '—' : '\u2014',
  137. '‘' : '\u2018',
  138. '’' : '\u2019',
  139. '‚' : '\u201A',
  140. '“' : '\u201C',
  141. '”' : '\u201D',
  142. '„' : '\u201E',
  143. '†' : '\u2020',
  144. '‡' : '\u2021',
  145. '‰' : '\u2030',
  146. '‹' : '\u2039',
  147. '›' : '\u203A',
  148. '€' : '\u20AC',
  149. 'ƒ' : '\u0192',
  150. 'Α' : '\u0391',
  151. 'Β' : '\u0392',
  152. 'Γ' : '\u0393',
  153. 'Δ' : '\u0394',
  154. 'Ε' : '\u0395',
  155. 'Ζ' : '\u0396',
  156. 'Η' : '\u0397',
  157. 'Θ' : '\u0398',
  158. 'Ι' : '\u0399',
  159. 'Κ' : '\u039A',
  160. 'Λ' : '\u039B',
  161. 'Μ' : '\u039C',
  162. 'Ν' : '\u039D',
  163. 'Ξ' : '\u039E',
  164. 'Ο' : '\u039F',
  165. 'Π' : '\u03A0',
  166. 'Ρ' : '\u03A1',
  167. 'Σ' : '\u03A3',
  168. 'Τ' : '\u03A4',
  169. 'Υ' : '\u03A5',
  170. 'Φ' : '\u03A6',
  171. 'Χ' : '\u03A7',
  172. 'Ψ' : '\u03A8',
  173. 'Ω' : '\u03A9',
  174. 'α' : '\u03B1',
  175. 'β' : '\u03B2',
  176. 'γ' : '\u03B3',
  177. 'δ' : '\u03B4',
  178. 'ε' : '\u03B5',
  179. 'ζ' : '\u03B6',
  180. 'η' : '\u03B7',
  181. 'θ' : '\u03B8',
  182. 'ι' : '\u03B9',
  183. 'κ' : '\u03BA',
  184. 'λ' : '\u03BB',
  185. 'μ' : '\u03BC',
  186. 'ν' : '\u03BD',
  187. 'ξ' : '\u03BE',
  188. 'ο' : '\u03BF',
  189. 'π' : '\u03C0',
  190. 'ρ' : '\u03C1',
  191. 'ς' : '\u03C2',
  192. 'σ' : '\u03C3',
  193. 'τ' : '\u03C4',
  194. 'υ' : '\u03C5',
  195. 'φ' : '\u03C6',
  196. 'χ' : '\u03C7',
  197. 'ψ' : '\u03C8',
  198. 'ω' : '\u03C9',
  199. 'ϑ' : '\u03D1',
  200. 'ϒ' : '\u03D2',
  201. 'ϖ' : '\u03D6',
  202. '•' : '\u2022',
  203. '…' : '\u2026',
  204. '′' : '\u2032',
  205. '″' : '\u2033',
  206. '‾' : '\u203E',
  207. '⁄' : '\u2044',
  208. '℘' : '\u2118',
  209. 'ℑ' : '\u2111',
  210. 'ℜ' : '\u211C',
  211. '™' : '\u2122',
  212. 'ℵ' : '\u2135',
  213. '←' : '\u2190',
  214. '↑' : '\u2191',
  215. '→' : '\u2192',
  216. '↓' : '\u2193',
  217. '↔' : '\u2194',
  218. '↵' : '\u21B5',
  219. '⇐' : '\u21D0',
  220. '⇑' : '\u21D1',
  221. '⇒' : '\u21D2',
  222. '⇓' : '\u21D3',
  223. '⇔' : '\u21D4',
  224. '∀' : '\u2200',
  225. '∂' : '\u2202',
  226. '∃' : '\u2203',
  227. '∅' : '\u2205',
  228. '∇' : '\u2207',
  229. '∈' : '\u2208',
  230. '∉' : '\u2209',
  231. '∋' : '\u220B',
  232. '∏' : '\u220F',
  233. '∑' : '\u2211',
  234. '−' : '\u2212',
  235. '∗' : '\u2217',
  236. '√' : '\u221A',
  237. '∝' : '\u221D',
  238. '∞' : '\u221E',
  239. '∠' : '\u2220',
  240. '∧' : '\u2227',
  241. '∨' : '\u2228',
  242. '∩' : '\u2229',
  243. '∪' : '\u222A',
  244. '∫' : '\u222B',
  245. '∴' : '\u2234',
  246. '∼' : '\u223C',
  247. '≅' : '\u2245',
  248. '≈' : '\u2248',
  249. '≠' : '\u2260',
  250. '≡' : '\u2261',
  251. '≤' : '\u2264',
  252. '≥' : '\u2265',
  253. '⊂' : '\u2282',
  254. '⊃' : '\u2283',
  255. '⊄' : '\u2284',
  256. '⊆' : '\u2286',
  257. '⊇' : '\u2287',
  258. '⊕' : '\u2295',
  259. '⊗' : '\u2297',
  260. '⊥' : '\u22A5',
  261. '⋅' : '\u22C5',
  262. '⌈' : '\u2308',
  263. '⌉' : '\u2309',
  264. '⌊' : '\u230A',
  265. '⌋' : '\u230B',
  266. '⟨' : '\u2329',
  267. '⟩' : '\u232A',
  268. '◊' : '\u25CA',
  269. '♠' : '\u2660',
  270. '♣' : '\u2663',
  271. '♥' : '\u2665',
  272. '♦' : '\u2666'
  273. };
  274. var decodeEntity = function (code) {
  275. // name type
  276. if (code.charAt(1) !== '#') {
  277. return HTML_ENTITIES[code] || code;
  278. }
  279. var n, c = code.charAt(2);
  280. // hex number
  281. if (c === 'x' || c === 'X') {
  282. c = code.substring(3, code.length - 1);
  283. n = parseInt(c, 16);
  284. } else {
  285. c = code.substring(2, code.length - 1);
  286. n = parseInt(c);
  287. }
  288. return isNaN(n) ? code : String.fromCharCode(n);
  289. };
  290. var htmlEncode = function (str) {
  291. return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')
  292. .replace(/</g, '&lt;').replace(/>/g, '&gt;');
  293. };
  294. var htmlDecode = function (str) {
  295. return str.replace(/&#?\w+;/g, decodeEntity);
  296. };
  297. var exports = htmlEncode;
  298. htmlEncode.htmlEncode = htmlEncode;
  299. htmlEncode.htmlDecode = htmlDecode;
  300. if (COMMON_JS) {
  301. module.exports = exports;
  302. } else {
  303. root.htmlEncode = htmlEncode;
  304. root.htmlDecode = htmlDecode;
  305. if (AMD) {
  306. define(function() {
  307. return exports;
  308. });
  309. }
  310. }
  311. })();