如何在 javascript / jquery 中打印 unicode 表情符号

How to print unicode emoticons in javascript / jquery

我正在使用 Javascript/jQuery、PHP 和 Websockets 创建聊天室。我想支持 Unicode 表情符号。我有一个带有表情符号的 DIV,当用户单击其中一个时,表情符号会插入到输入框中。简单。

用户按 "enter" 并将文本发送到 PHP。但是PHP看不懂表情(显示“??”),所以我在Javascript中做了一个函数,在提交给PHP之前转换为\uXXXX格式(4字节) .

示例:

1) 用户提交 "testtest"

2) Javascript 转换为 "test\uD83D\uDE00test"(下面的函数)- 如果我转到 Chrome 控制台并键入 "test\uD83D\uDE00test",它会正确显示 "testtest",所以,转换后的字符串是正确的。

3) 将字符串提交给PHP:"test\uD83D\uDE00test"

4) PHP 发送到 Websocket,它只会将字符串附加到 DIV,类似于 $('#chat').append(d),其中 "d"(从 socket.io 对象)包含 "test\uD83D\uDE00test".

但是显示字符串"test\uD83D\uDE00test"...我想显示表情

我的错误在哪里?


表情转\u格式功能:扫描所有字符,只修改非ascii字符。

function ChatUCode(t) {
 S='';
 for (a=0;a<t.length;a++) {
  if (t.charCodeAt(a)>255) {
   S+='\u'+('0000'+t.charCodeAt(a).toString(16)).substr(-4,4).toUpperCase();
  } else {
   S+=t.charAt(a);
  }
 }
 return S;
}

找到解决方案,感谢@cegfault idea。

将字符串发送到JSON.parse函数,它会正确显示表情符号。但我不得不将字符串转义为 JSON 格式。

$('#chat').append(JSON.parse('"'+d+'"'));

另一种不太安全的方法是相同的想法,但使用 eval() 函数,也在引号之间。