Как распечатать смайлики Юникода в javascript / jquery - PullRequest
0 голосов
/ 24 января 2019

Я создаю чат, используя Javascript / jQuery, PHP и Websockets. Я хочу поддерживать смайлики Unicode. У меня есть DIV с смайликами, и когда пользователь нажимает на один из них, смайлик вставляется в поле ввода. Простой.

Пользователь нажимает «ввод» и текст отправляется на PHP. Но PHP не может понять смайлик (показывает «??»), поэтому я сделал функцию в Javascript для преобразования в формат \ uXXXX (4 байта) перед отправкой в ​​PHP.

Пример:

1) Пользователь отправляет "test?test"

2) Javascript преобразуется в «test \ uD83D \ uDE00test» (функция ниже). Если я перехожу в консоль Chrome и набираю «test \ uD83D \ uDE00test», он правильно показывает «test?test», поэтому преобразованная строка правильный.

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;
}

1 Ответ

0 голосов
/ 24 января 2019

Нашел решение, благодаря идее @cegfault.

Отправляя строку в функцию JSON.parse, она будет правильно отображать смайлики. Но мне пришлось экранировать строку в формате JSON.

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

Другой способ, не такой безопасный, - та же идея, но с использованием функции eval(), также между кавычками.

...