liusuyi
2023-04-24 4737f1e038743ced243c9e52423404d9034d6107
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';
 
const internals = {};
 
 
module.exports = function (input) {
 
    if (!input) {
        return '';
    }
 
    let escaped = '';
 
    for (let i = 0; i < input.length; ++i) {
 
        const charCode = input.charCodeAt(i);
 
        if (internals.isSafe(charCode)) {
            escaped += input[i];
        }
        else {
            escaped += internals.escapeHtmlChar(charCode);
        }
    }
 
    return escaped;
};
 
 
internals.escapeHtmlChar = function (charCode) {
 
    const namedEscape = internals.namedHtml[charCode];
    if (typeof namedEscape !== 'undefined') {
        return namedEscape;
    }
 
    if (charCode >= 256) {
        return '&#' + charCode + ';';
    }
 
    const hexValue = charCode.toString(16).padStart(2, '0');
    return `&#x${hexValue};`;
};
 
 
internals.isSafe = function (charCode) {
 
    return (typeof internals.safeCharCodes[charCode] !== 'undefined');
};
 
 
internals.namedHtml = {
    '38': '&amp;',
    '60': '&lt;',
    '62': '&gt;',
    '34': '&quot;',
    '160': '&nbsp;',
    '162': '&cent;',
    '163': '&pound;',
    '164': '&curren;',
    '169': '&copy;',
    '174': '&reg;'
};
 
 
internals.safeCharCodes = (function () {
 
    const safe = {};
 
    for (let i = 32; i < 123; ++i) {
 
        if ((i >= 97) ||                    // a-z
            (i >= 65 && i <= 90) ||         // A-Z
            (i >= 48 && i <= 57) ||         // 0-9
            i === 32 ||                     // space
            i === 46 ||                     // .
            i === 44 ||                     // ,
            i === 45 ||                     // -
            i === 58 ||                     // :
            i === 95) {                     // _
 
            safe[i] = null;
        }
    }
 
    return safe;
}());