[FIX] Issue with special message rendering (#19817)
parent
016289c537
commit
96d3155245
@ -0,0 +1,19 @@ |
|||||||
|
import assert from 'assert'; |
||||||
|
|
||||||
|
import { describe, it } from 'mocha'; |
||||||
|
|
||||||
|
import { escapeHTML } from './escapeHTML'; |
||||||
|
|
||||||
|
describe('escapeHTML', () => { |
||||||
|
it('works', () => { |
||||||
|
assert.strictEqual(escapeHTML('<div>Blah & "blah" & \'blah\'</div>'), '<div>Blah & "blah" & 'blah'</div>'); |
||||||
|
assert.strictEqual(escapeHTML('<'), '&lt;'); |
||||||
|
assert.strictEqual(escapeHTML(' '), ' '); |
||||||
|
assert.strictEqual(escapeHTML('¢'), '¢'); |
||||||
|
assert.strictEqual(escapeHTML('¢ £ ¥ € © ®'), '¢ £ ¥ € © ®'); |
||||||
|
assert.strictEqual(escapeHTML(5 as unknown as string), '5'); |
||||||
|
assert.strictEqual(escapeHTML(''), ''); |
||||||
|
assert.strictEqual(escapeHTML(null as unknown as string), ''); |
||||||
|
assert.strictEqual(escapeHTML(undefined as unknown as string), ''); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,27 @@ |
|||||||
|
const characterToHtmlEntityCode = { |
||||||
|
'¢': 'cent', |
||||||
|
'£': 'pound', |
||||||
|
'¥': 'yen', |
||||||
|
'€': 'euro', |
||||||
|
'©': 'copy', |
||||||
|
'®': 'reg', |
||||||
|
'<': 'lt', |
||||||
|
'>': 'gt', |
||||||
|
'"': 'quot', |
||||||
|
'&': 'amp', |
||||||
|
'\'': '#39', |
||||||
|
} as const; |
||||||
|
|
||||||
|
const regex = new RegExp(`[${ Object.keys(characterToHtmlEntityCode).join('') }]`, 'g'); |
||||||
|
|
||||||
|
const toString = (object: unknown): string => |
||||||
|
(object ? `${ object }` : ''); |
||||||
|
|
||||||
|
const isEscapable = (char: string): char is keyof typeof characterToHtmlEntityCode => |
||||||
|
char in characterToHtmlEntityCode; |
||||||
|
|
||||||
|
const escapeChar = (char: string): string => |
||||||
|
(isEscapable(char) ? `&${ characterToHtmlEntityCode[char] };` : ''); |
||||||
|
|
||||||
|
export const escapeHTML = (str: string): string => |
||||||
|
toString(str).replace(regex, escapeChar); |
Loading…
Reference in new issue