使用Twemoji将输入解析为表情符号

时间:2015-05-06 01:56:44

标签: javascript

所以我在这里设置了一个codepen来演示我的问题:http://codepen.io/anon/pen/yNYzXx

var emojiString = "I \u2764\uFE0F emoji!";        

var parsedString = twemoji.parse(emojiString);
$('#string-result').html(parsedString);

var parsedInput = twemoji.parse($('#emoji-input').val());
$('#input-result').html(parsedInput);

如果我输入文字“I \ u2764 \ uFE0F表情符号!”进入输入框并单击go我希望在两行上都得到相同的结果而不是解析输入文本但变量是。

1 个答案:

答案 0 :(得分:0)

您可能在输入字段中输入了I \u2764\uFE0F emoji!。当您在输入字段中键入时,实际上您会获得字符串"I \\u2764\\uFE0F emoji!"而不是字符串"I \u2764\uFE0F emoji!",请注意额外的\

在您的变量中,在字符串文字"I \u2764\uFE0F emoji!"中,\中的\u2764具有特殊含义,它是一个角色字符。它实际上表示\表示Unicode代码点,而不是表示字符\u2764。代码点\u2764\uFE0F一起构成了心脏角色。换句话说,"\u2764\uFE0F"是代表一个字符的代码。

当您在输入字段中键入I \u2764\uFE0F emoji!时,您没有输入心形字符,而是实际传递了常规\字符。由于\具有特殊含义,我们将其表示为类似于此\\的字符串,因此输入字段中的字符串看起来不同。

所以基本上你输入的JavaScript代码代表你想要输入的字符,而不是字符本身。我们可以通过评估您键入的内容来解决这个问题,就像它是JavaScript代码一样。如果您将var parsedInput = twemoji.parse($('#emoji-input').val());替换为var parsedInput = twemoji.parse(eval("'" + $('#emoji-input').val() + "'"));,则代码将按预期工作。另外,避免使用eval,因为它将运行任何传递给它的东西。