[FIX] Issue with special message rendering (#19817)
parent
1f55d43ac8
commit
f2c957a657
@ -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