├── .covignore
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── bower.json
├── build
└── htmlencode.min.js
├── index.d.ts
├── package.json
├── src
└── htmlencode.js
└── tests
├── index.html
├── node-test.js
└── test.js
/.covignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | /tests/
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | /covreporter/
3 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "0.12.15"
4 | - "4.5"
5 | - "6.5.0"
6 | before_install:
7 | - npm install coveralls
8 | - npm install mocha-lcov-reporter
9 | script: npm run-script coveralls
10 | branches:
11 | only:
12 | - master
13 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## v0.3.0 / 2017-02-10
4 | ### Added
5 | - AMD support.
6 |
7 | ### Fixed
8 | - `root` is undefined in some special environment.
9 |
10 | ## v0.2.0 / 2016-08-30
11 | ### Added
12 | - TypeScript support.
13 | - unit tests to 100% coverage.
14 |
15 | ## v0.1.1 / 2015-01-09
16 | ### Added
17 | - bower package.
18 | - coveralls.
19 |
20 | ### Improved
21 | - test framework.
22 |
23 | ## v0.1.0 / 2014-12-30
24 | ### Added
25 | - create project.
26 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014-2017 Chen, Yi-Cyuan
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # js-htmlencode
2 | [](https://travis-ci.org/emn178/js-htmlencode)
3 | [](https://coveralls.io/r/emn178/js-htmlencode?branch=master)
4 | [](https://nodei.co/npm/js-htmlencode/)
5 | A simple HTML encode / decode function for JavaScript.
6 |
7 | ## Demo
8 | [HTML Encode Online](http://emn178.github.io/online-tools/html_encode.html)
9 | [HTML Decode Online](http://emn178.github.io/online-tools/html_decode.html)
10 |
11 | ## Download
12 | [Compress](https://raw.github.com/emn178/js-htmlencode/master/build/htmlencode.min.js)
13 | [Uncompress](https://raw.github.com/emn178/js-htmlencode/master/src/htmlencode.js)
14 |
15 | ## Installation
16 | You can also install js-htmlencode by using Bower.
17 |
18 | bower install js-htmlencode
19 |
20 | For node.js, you can use this command to install:
21 |
22 | npm install js-htmlencode
23 |
24 | ## Usage
25 | You could use like this:
26 | ```JavaScript
27 | htmlEncode('Html to encode');
28 | htmlDecode('String to decode');
29 | ```
30 | If you use node.js, you should require the module first:
31 | ```JavaScript
32 | var htmlEncode = require('js-htmlencode');
33 | ```
34 | Or
35 | ```JavaScript
36 | var htmlEncode = require('js-htmlencode').htmlEncode;
37 | var htmlDecode = require('js-htmlencode').htmlDecode;
38 | ```
39 | It supports AMD:
40 | ```JavaScript
41 | require(['your/path/htmlencode.js'], function (htmlEncode) {
42 | var htmlEncode = htmlEncode.htmlEncode;
43 | var htmlDecode = htmlDecode.htmlDecode;
44 | // ...
45 | });
46 | ```
47 | For TypeScript
48 | ```TypeScript
49 | import { htmlEncode, htmlDecode } from 'js-htmlencode';
50 | htmlEncode('ooo');
51 | htmlDecode('xxx');
52 | ```
53 | ## Example
54 | ```JavaScript
55 | htmlEncode('HTML Encode'); // <a href="#">HTML Encode</a>
56 | htmlDecode('<a href="#">HTML Encode</a>'); // HTML Encode
57 | htmlDecode('HTML Encode'); // HTML Encode
58 | ```
59 |
60 | ## License
61 | The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).
62 |
63 | ## Contact
64 | The project's website is located at https://github.com/emn178/js-htmlencode
65 | Author: Chen, Yi-Cyuan (emn178@gmail.com)
66 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "js-htmlencode",
3 | "version": "0.3.0",
4 | "main": ["src/htmlencode.js"],
5 | "ignore": [
6 | "samples",
7 | "tests"
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/build/htmlencode.min.js:
--------------------------------------------------------------------------------
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 | !function(){"use strict";var e="object"==typeof window?window:{},r=!e.JS_HTMLENCODE_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;r&&(e=global);var a=!e.JS_HTMLENCODE_NO_COMMON_JS&&"object"==typeof module&&module.exports,i="function"==typeof define&&define.amd,t={" ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","":"","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",""":'"',"&":"&","<":"<",">":">","'":"'","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","":"","":"","":"","":"","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"〈","〉":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"},o=function(e){if("#"!==e.charAt(1))return t[e]||e;var r,a=e.charAt(2);return"x"===a||"X"===a?(a=e.substring(3,e.length-1),r=parseInt(a,16)):(a=e.substring(2,e.length-1),r=parseInt(a)),isNaN(r)?e:String.fromCharCode(r)},l=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},u=function(e){return e.replace(/?\w+;/g,o)},c=l;l.htmlEncode=l,l.htmlDecode=u,a?module.exports=c:(e.htmlEncode=l,e.htmlDecode=u,i&&define(function(){return c}))}();
--------------------------------------------------------------------------------
/index.d.ts:
--------------------------------------------------------------------------------
1 | interface decode {
2 | /**
3 | * HTML Decode
4 | *
5 | * @param str The content you want to HTML decode.
6 | */
7 | (str: string): string;
8 | }
9 |
10 | interface encode {
11 | /**
12 | * HTML Encode
13 | *
14 | * @param str The content you want to HTML encode.
15 | */
16 | (str: string): string;
17 | }
18 |
19 | export var htmlEncode: encode;
20 | export var htmlDecode: decode;
21 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "js-htmlencode",
3 | "version": "0.3.0",
4 | "description": "A simple HTML encode / decode function for JavaScript.",
5 | "main": "src/htmlencode.js",
6 | "typings": "index",
7 | "devDependencies": {
8 | "expect.js": "~0.3.1",
9 | "jscoverage": "~0.5.9",
10 | "mocha": "^3.0.2",
11 | "uglifyjs": "~2.4.10"
12 | },
13 | "scripts": {
14 | "test": "mocha tests/node-test.js -r jscoverage",
15 | "report": "mocha tests/node-test.js -r jscoverage --covout=html",
16 | "coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls",
17 | "build": "uglifyjs src/htmlencode.js --compress --mangle --comments --output build/htmlencode.min.js"
18 | },
19 | "repository": {
20 | "type": "git",
21 | "url": "https://github.com/emn178/js-htmlencode.git"
22 | },
23 | "keywords": [
24 | "htmlencode",
25 | "htmldecode",
26 | "encode",
27 | "decode"
28 | ],
29 | "license": "MIT",
30 | "author": "emn178 ",
31 | "homepage": "https://github.com/emn178/js-htmlencode",
32 | "bugs": {
33 | "url": "https://github.com/emn178/js-htmlencode/issues"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/htmlencode.js:
--------------------------------------------------------------------------------
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 |
13 | var root = typeof window === 'object' ? window : {};
14 | var NODE_JS = !root.JS_HTMLENCODE_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
15 | if (NODE_JS) {
16 | root = global;
17 | }
18 | var COMMON_JS = !root.JS_HTMLENCODE_NO_COMMON_JS && typeof module === 'object' && module.exports;
19 | var AMD = typeof define === 'function' && define.amd;
20 |
21 | var HTML_ENTITIES = {
22 | ' ' : '\u00A0',
23 | '¡' : '\u00A1',
24 | '¢' : '\u00A2',
25 | '£' : '\u00A3',
26 | '¤' : '\u00A4',
27 | '¥' : '\u00A5',
28 | '¦' : '\u00A6',
29 | '§' : '\u00A7',
30 | '¨' : '\u00A8',
31 | '©' : '\u00A9',
32 | 'ª' : '\u00AA',
33 | '«' : '\u00AB',
34 | '¬' : '\u00AC',
35 | '' : '\u00AD',
36 | '®' : '\u00AE',
37 | '¯' : '\u00AF',
38 | '°' : '\u00B0',
39 | '±' : '\u00B1',
40 | '²' : '\u00B2',
41 | '³' : '\u00B3',
42 | '´' : '\u00B4',
43 | 'µ' : '\u00B5',
44 | '¶' : '\u00B6',
45 | '·' : '\u00B7',
46 | '¸' : '\u00B8',
47 | '¹' : '\u00B9',
48 | 'º' : '\u00BA',
49 | '»' : '\u00BB',
50 | '¼' : '\u00BC',
51 | '½' : '\u00BD',
52 | '¾' : '\u00BE',
53 | '¿' : '\u00BF',
54 | 'À' : '\u00C0',
55 | 'Á' : '\u00C1',
56 | 'Â' : '\u00C2',
57 | 'Ã' : '\u00C3',
58 | 'Ä' : '\u00C4',
59 | 'Å' : '\u00C5',
60 | 'Æ' : '\u00C6',
61 | 'Ç' : '\u00C7',
62 | 'È' : '\u00C8',
63 | 'É' : '\u00C9',
64 | 'Ê' : '\u00CA',
65 | 'Ë' : '\u00CB',
66 | 'Ì' : '\u00CC',
67 | 'Í' : '\u00CD',
68 | 'Î' : '\u00CE',
69 | 'Ï' : '\u00CF',
70 | 'Ð' : '\u00D0',
71 | 'Ñ' : '\u00D1',
72 | 'Ò' : '\u00D2',
73 | 'Ó' : '\u00D3',
74 | 'Ô' : '\u00D4',
75 | 'Õ' : '\u00D5',
76 | 'Ö' : '\u00D6',
77 | '×' : '\u00D7',
78 | 'Ø' : '\u00D8',
79 | 'Ù' : '\u00D9',
80 | 'Ú' : '\u00DA',
81 | 'Û' : '\u00DB',
82 | 'Ü' : '\u00DC',
83 | 'Ý' : '\u00DD',
84 | 'Þ' : '\u00DE',
85 | 'ß' : '\u00DF',
86 | 'à' : '\u00E0',
87 | 'á' : '\u00E1',
88 | 'â' : '\u00E2',
89 | 'ã' : '\u00E3',
90 | 'ä' : '\u00E4',
91 | 'å' : '\u00E5',
92 | 'æ' : '\u00E6',
93 | 'ç' : '\u00E7',
94 | 'è' : '\u00E8',
95 | 'é' : '\u00E9',
96 | 'ê' : '\u00EA',
97 | 'ë' : '\u00EB',
98 | 'ì' : '\u00EC',
99 | 'í' : '\u00ED',
100 | 'î' : '\u00EE',
101 | 'ï' : '\u00EF',
102 | 'ð' : '\u00F0',
103 | 'ñ' : '\u00F1',
104 | 'ò' : '\u00F2',
105 | 'ó' : '\u00F3',
106 | 'ô' : '\u00F4',
107 | 'õ' : '\u00F5',
108 | 'ö' : '\u00F6',
109 | '÷' : '\u00F7',
110 | 'ø' : '\u00F8',
111 | 'ù' : '\u00F9',
112 | 'ú' : '\u00FA',
113 | 'û' : '\u00FB',
114 | 'ü' : '\u00FC',
115 | 'ý' : '\u00FD',
116 | 'þ' : '\u00FE',
117 | 'ÿ' : '\u00FF',
118 | '"' : '\u0022',
119 | '&' : '\u0026',
120 | '<' : '\u003C',
121 | '>' : '\u003E',
122 | ''' : '\u0027',
123 | 'Œ' : '\u0152',
124 | 'œ' : '\u0153',
125 | 'Š' : '\u0160',
126 | 'š' : '\u0161',
127 | 'Ÿ' : '\u0178',
128 | 'ˆ' : '\u02C6',
129 | '˜' : '\u02DC',
130 | ' ' : '\u2002',
131 | ' ' : '\u2003',
132 | ' ' : '\u2009',
133 | '' : '\u200C',
134 | '' : '\u200D',
135 | '' : '\u200E',
136 | '' : '\u200F',
137 | '–' : '\u2013',
138 | '—' : '\u2014',
139 | '‘' : '\u2018',
140 | '’' : '\u2019',
141 | '‚' : '\u201A',
142 | '“' : '\u201C',
143 | '”' : '\u201D',
144 | '„' : '\u201E',
145 | '†' : '\u2020',
146 | '‡' : '\u2021',
147 | '‰' : '\u2030',
148 | '‹' : '\u2039',
149 | '›' : '\u203A',
150 | '€' : '\u20AC',
151 | 'ƒ' : '\u0192',
152 | 'Α' : '\u0391',
153 | 'Β' : '\u0392',
154 | 'Γ' : '\u0393',
155 | 'Δ' : '\u0394',
156 | 'Ε' : '\u0395',
157 | 'Ζ' : '\u0396',
158 | 'Η' : '\u0397',
159 | 'Θ' : '\u0398',
160 | 'Ι' : '\u0399',
161 | 'Κ' : '\u039A',
162 | 'Λ' : '\u039B',
163 | 'Μ' : '\u039C',
164 | 'Ν' : '\u039D',
165 | 'Ξ' : '\u039E',
166 | 'Ο' : '\u039F',
167 | 'Π' : '\u03A0',
168 | 'Ρ' : '\u03A1',
169 | 'Σ' : '\u03A3',
170 | 'Τ' : '\u03A4',
171 | 'Υ' : '\u03A5',
172 | 'Φ' : '\u03A6',
173 | 'Χ' : '\u03A7',
174 | 'Ψ' : '\u03A8',
175 | 'Ω' : '\u03A9',
176 | 'α' : '\u03B1',
177 | 'β' : '\u03B2',
178 | 'γ' : '\u03B3',
179 | 'δ' : '\u03B4',
180 | 'ε' : '\u03B5',
181 | 'ζ' : '\u03B6',
182 | 'η' : '\u03B7',
183 | 'θ' : '\u03B8',
184 | 'ι' : '\u03B9',
185 | 'κ' : '\u03BA',
186 | 'λ' : '\u03BB',
187 | 'μ' : '\u03BC',
188 | 'ν' : '\u03BD',
189 | 'ξ' : '\u03BE',
190 | 'ο' : '\u03BF',
191 | 'π' : '\u03C0',
192 | 'ρ' : '\u03C1',
193 | 'ς' : '\u03C2',
194 | 'σ' : '\u03C3',
195 | 'τ' : '\u03C4',
196 | 'υ' : '\u03C5',
197 | 'φ' : '\u03C6',
198 | 'χ' : '\u03C7',
199 | 'ψ' : '\u03C8',
200 | 'ω' : '\u03C9',
201 | 'ϑ' : '\u03D1',
202 | 'ϒ' : '\u03D2',
203 | 'ϖ' : '\u03D6',
204 | '•' : '\u2022',
205 | '…' : '\u2026',
206 | '′' : '\u2032',
207 | '″' : '\u2033',
208 | '‾' : '\u203E',
209 | '⁄' : '\u2044',
210 | '℘' : '\u2118',
211 | 'ℑ' : '\u2111',
212 | 'ℜ' : '\u211C',
213 | '™' : '\u2122',
214 | 'ℵ' : '\u2135',
215 | '←' : '\u2190',
216 | '↑' : '\u2191',
217 | '→' : '\u2192',
218 | '↓' : '\u2193',
219 | '↔' : '\u2194',
220 | '↵' : '\u21B5',
221 | '⇐' : '\u21D0',
222 | '⇑' : '\u21D1',
223 | '⇒' : '\u21D2',
224 | '⇓' : '\u21D3',
225 | '⇔' : '\u21D4',
226 | '∀' : '\u2200',
227 | '∂' : '\u2202',
228 | '∃' : '\u2203',
229 | '∅' : '\u2205',
230 | '∇' : '\u2207',
231 | '∈' : '\u2208',
232 | '∉' : '\u2209',
233 | '∋' : '\u220B',
234 | '∏' : '\u220F',
235 | '∑' : '\u2211',
236 | '−' : '\u2212',
237 | '∗' : '\u2217',
238 | '√' : '\u221A',
239 | '∝' : '\u221D',
240 | '∞' : '\u221E',
241 | '∠' : '\u2220',
242 | '∧' : '\u2227',
243 | '∨' : '\u2228',
244 | '∩' : '\u2229',
245 | '∪' : '\u222A',
246 | '∫' : '\u222B',
247 | '∴' : '\u2234',
248 | '∼' : '\u223C',
249 | '≅' : '\u2245',
250 | '≈' : '\u2248',
251 | '≠' : '\u2260',
252 | '≡' : '\u2261',
253 | '≤' : '\u2264',
254 | '≥' : '\u2265',
255 | '⊂' : '\u2282',
256 | '⊃' : '\u2283',
257 | '⊄' : '\u2284',
258 | '⊆' : '\u2286',
259 | '⊇' : '\u2287',
260 | '⊕' : '\u2295',
261 | '⊗' : '\u2297',
262 | '⊥' : '\u22A5',
263 | '⋅' : '\u22C5',
264 | '⌈' : '\u2308',
265 | '⌉' : '\u2309',
266 | '⌊' : '\u230A',
267 | '⌋' : '\u230B',
268 | '〈' : '\u2329',
269 | '〉' : '\u232A',
270 | '◊' : '\u25CA',
271 | '♠' : '\u2660',
272 | '♣' : '\u2663',
273 | '♥' : '\u2665',
274 | '♦' : '\u2666'
275 | };
276 |
277 | var decodeEntity = function (code) {
278 | // name type
279 | if (code.charAt(1) !== '#') {
280 | return HTML_ENTITIES[code] || code;
281 | }
282 |
283 | var n, c = code.charAt(2);
284 | // hex number
285 | if (c === 'x' || c === 'X') {
286 | c = code.substring(3, code.length - 1);
287 | n = parseInt(c, 16);
288 | } else {
289 | c = code.substring(2, code.length - 1);
290 | n = parseInt(c);
291 | }
292 | return isNaN(n) ? code : String.fromCharCode(n);
293 | };
294 |
295 | var htmlEncode = function (str) {
296 | return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')
297 | .replace(//g, '>');
298 | };
299 |
300 | var htmlDecode = function (str) {
301 | return str.replace(/?\w+;/g, decodeEntity);
302 | };
303 |
304 | var exports = htmlEncode;
305 | htmlEncode.htmlEncode = htmlEncode;
306 | htmlEncode.htmlDecode = htmlDecode;
307 | if (COMMON_JS) {
308 | module.exports = exports;
309 | } else {
310 | root.htmlEncode = htmlEncode;
311 | root.htmlDecode = htmlDecode;
312 | if (AMD) {
313 | define(function() {
314 | return exports;
315 | });
316 | }
317 | }
318 | })();
319 |
--------------------------------------------------------------------------------
/tests/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HTML Encode / Decode
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/tests/node-test.js:
--------------------------------------------------------------------------------
1 | // Node.js env
2 | expect = require('expect.js');
3 | htmlEncode = require('../src/htmlencode.js').htmlEncode;
4 | htmlDecode = require('../src/htmlencode.js').htmlDecode;
5 | require('./test.js');
6 |
7 | delete require.cache[require.resolve('../src/htmlencode.js')]
8 | delete require.cache[require.resolve('./test.js')]
9 | htmlEncode = null;
10 | htmlDecode = null;
11 |
12 | // Webpack browser env
13 | JS_HTMLENCODE_NO_NODE_JS = true;
14 | window = global;
15 | htmlEncode = require('../src/htmlencode.js').htmlEncode;
16 | htmlDecode = require('../src/htmlencode.js').htmlDecode;
17 | require('./test.js');
18 |
19 | delete require.cache[require.resolve('../src/htmlencode.js')];
20 | delete require.cache[require.resolve('./test.js')];
21 | htmlEncode = null;
22 | htmlDecode = null;
23 |
24 | // browser env
25 | JS_HTMLENCODE_NO_NODE_JS = true;
26 | JS_HTMLENCODE_NO_COMMON_JS = true;
27 | window = global;
28 | require('../src/htmlencode.js')
29 | require('./test.js');
30 |
31 | delete require.cache[require.resolve('../src/htmlencode.js')];
32 | delete require.cache[require.resolve('./test.js')];
33 | htmlEncode = null;
34 | htmlDecode = null;
35 |
36 | // browser AMD
37 | JS_HTMLENCODE_NO_NODE_JS = true;
38 | JS_HTMLENCODE_NO_COMMON_JS = true;
39 | window = global;
40 | define = function (func) {
41 | htmlEncode = func().htmlEncode;
42 | htmlDecode = func().htmlDecode;
43 | require('./test.js');
44 | };
45 | define.amd = true;
46 |
47 | require('../src/htmlencode.js');
48 |
--------------------------------------------------------------------------------
/tests/test.js:
--------------------------------------------------------------------------------
1 | (function (htmlEncode, htmlDecode) {
2 | var tests = [
3 | {
4 | encode: {
5 | method: htmlEncode,
6 | text: 'htmlEncode'
7 | },
8 | decode: {
9 | method: htmlDecode,
10 | text: 'htmlDecode'
11 | }
12 | }
13 | ];
14 |
15 | if (htmlEncode.htmlEncode) {
16 | tests = tests.concat([
17 | {
18 | encode: {
19 | method: htmlEncode.htmlEncode,
20 | text: 'htmlEncode.htmlEncode'
21 | },
22 | decode: {
23 | method: htmlEncode.htmlDecode,
24 | text: 'htmlEncode.htmlDecode'
25 | }
26 | }
27 | ]);
28 | }
29 |
30 | tests.forEach(function (test) {
31 | describe('#' + test.encode.text, function() {
32 | it('should be successful', function() {
33 | expect(test.encode.method('HTML Encode')).to.be('<a href="#">HTML Encode</a>');
34 | expect(test.encode.method('<\'&">')).to.be('<'&">');
35 | });
36 | });
37 |
38 | describe('#' + test.decode.text, function() {
39 | it('should be successful', function() {
40 | expect(test.decode.method('<a href="#">HTML Encode</a>')).to.be('HTML Encode');
41 | expect(test.decode.method('<'&">')).to.be('<\'&">');
42 | expect(test.decode.method('HTML Encode')).to.be('HTML Encode');
43 | expect(test.decode.method('&')).to.be('&');
44 | expect(test.decode.method('©©©')).to.be('©©©');
45 | expect(test.decode.method('¬found;')).to.be('¬found;');
46 | expect(test.decode.method('nan;')).to.be('nan;');
47 | });
48 | });
49 | });
50 | })(htmlEncode, htmlDecode);
51 |
--------------------------------------------------------------------------------