diff --git a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
index d91b48497..c8425c4c6 100644
--- a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
+++ b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js
@@ -73,5 +73,10 @@ describe('emoji', () => {
expect(emojify('😄
😴😇'))
.toEqual('😄
😴');
});
+
+ it('skips the textual presentation VS15 character', () => {
+ expect(emojify('✴︎')) // This is U+2734 EIGHT POINTED BLACK STAR then U+FE0E VARIATION SELECTOR-15
+ .toEqual('');
+ });
});
});
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index 0f005dd50..988cea253 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -62,6 +62,10 @@ const emojify = (str, customEmojis = {}) => {
const title = shortCode ? `:${shortCode}:` : '';
replacement = ``;
rend = i + match.length;
+ // If the matched character was followed by VS15 (for selecting text presentation), skip it.
+ if (str.codePointAt(rend) === 65038) {
+ rend += 1;
+ }
}
rtn += str.slice(0, i) + replacement;
str = str.slice(rend);