Я создаю чат, используя 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;
}