关于emoji表情,支持在app端发送web端显示,web端发送给app端显示,web与wap端互相显示。
要用到emoji.js和emoji.jquery.js两个插件配合实现三端互通。
1、app端发送的emoji表情----到服务器---服务器存储的是‘问号’,无法显示如图所示:
后台的同学也试验了网上的改变数据库字符集方法,但是还是不生效。
先说下主要思路:
web从服务器拿到带‘问号‘的内容,其实这些问号是 html实体 ,通过下面 html实体转化成u+16进制编码(utf-16)的方法 utf16toEntities(str),实现将html实体转化为 u+形式,在通过emoji.js提供的 <span class='emoji emoji"+codema+"'></span>形式展示出来 图片。
2、web向app发送消息:
第一步:展示图片,因为app端只能接受html实体,就是服务器端要存‘问号’这种样子,我们先用jquery.emoji.js实现界面,通过toUnicode2(str)方法将#微笑#这种两个井号包裹的汉字转化成u+形式,在通过toUnicode(str)方法将u+形式转化成<span class='emoji emoji"+codema+"'></span>形式展示出来 图片。
第二步:是要发送给服务器端html实体,通过emoji.js中有个jEmoji.EMOJI_MAP一个对象,这个对象里是所有能在web页显示的 emoji表情HTML实体 与 他对应的u+16进制编码(utf-16)的对应表。先执行getarrmap()格式化这个对应关系表,在通过fanzhuan(str)方法,实现u+形式转化成html实体,发送给服务器端。
3、web给wap发送消息(其实就是web to web)
因为web端能选择的emoji表情 都是 jquery.emoji.js提供的界面中的表情,我们讲这些表情一一对应自己设计一个表,在选择某个表情时,返回对应的u+编码,在通过 emoji.js提供的 <span class='emoji emoji"+codema+"'></span>形式展示出来 图片。
具体方法:
hljs.initHighlightingOnLoad();
$(".rob_c_textfn").emoji({
button: ".rob_emojiandimg",
showTab: false,
animation: 'none',
icons: [{
path: "images/qq/",
file: ".png",
maxNum: 21,
excludeNums: [],
placeholder: "#{alias}#",
alias: {
1: "微笑",
2: "大笑",
3: "笑哭",
4: "发呆",
5: "睡觉",
6: "尴尬",
7: "抓狂",
8: "天使",
9: "眨眼",
10: "可爱",
11: "吃",
12: "闭眼",
13: "喜欢",
14: "酷",
15: "得意",
16: "闭嘴",
17: "口罩",
18: "难过",
19: "囧",
20: "吃惊",
21: "撇嘴"
}
}]
}); var arremoji=[
{'zcname':'微笑','emojicode':'1F604'},
{'zcname':'大笑','emojicode':'1F601'},
{'zcname':'笑哭','emojicode':'1F602'},
{'zcname':'发呆','emojicode':'1F633'},
{'zcname':'睡觉','emojicode':'1F634'},
{'zcname':'尴尬','emojicode':'1F605'},
{'zcname':'抓狂','emojicode':'1F606'},
{'zcname':'天使','emojicode':'1F607'},
{'zcname':'眨眼','emojicode':'1F609'},
{'zcname':'可爱','emojicode':'263A'},
{'zcname':'吃','emojicode':'1F60B'},
{'zcname':'闭眼','emojicode':'1F60C'},
{'zcname':'喜欢','emojicode':'1F60D'},
{'zcname':'酷','emojicode':'1F60E'},
{'zcname':'得意','emojicode':'1F60F'},
{'zcname':'闭嘴','emojicode':'1F610'},
{'zcname':'口罩','emojicode':'1F637'},
{'zcname':'难过','emojicode':'1F612'},
{'zcname':'囧','emojicode':'1F613'},
{'zcname':'吃惊','emojicode':'1F632'},
{'zcname':'撇嘴','emojicode':'1F615'}
]; var arremoji_val=[];
function getarrmap(){
var objemoji=jEmoji.EMOJI_MAP;
console.log(objemoji);
for(var i in objemoji){
var item_o = {};
item_o[i] = objemoji[i];
arremoji_val.push(item_o);
} }
getarrmap(); // #文字#转u+格式
function toUnicode2(s){
return s.replace(/(?:#{1}[\u4e00-\u9fa5]{1,3}#{1})/g,function(a){
a=a.replace(/#/g,'');
for(var i=0;i<arremoji.length;i++){
if(a==arremoji[i].zcname){
return 'u+'+arremoji[i].emojicode;
}
}
});
}; // u+格式转span模式 (接受服务器传来的u+unicode后转码成span图片)
var regUtospan=/(U\+0030\s{1}U\+20E3)|(U\+0031\s{1}U\+20E3)|(U\+0032\s{1}U\+20E3)|(U\+0033\s{1}U\+20E3)|(U\+0034\s{1}U\+20E3)|(U\+0035\s{1}U\+20E3)|(U\+0036\s{1}U\+20E3)|(U\+0037\s{1}U\+20E3)|(U\+0038\s{1}U\+20E3)|(U\+0039\s{1}U\+20E3)|(U\+0023\s{1}U\+20E3)|(u\+{1}[0-9a-fA-F]{4,6})/ig;
function toUnicode(s){
return s.replace(regUtospan,function(a){
switch (a){
case 'U+0030 U+20E3':
return "<span class='emoji emoji3020e3'></span>";
break;
case 'U+0031 U+20E3':
return "<span class='emoji emoji3120e3'></span>";
break;
case 'U+0032 U+20E3':
return "<span class='emoji emoji3220e3'></span>";
break;
case 'U+0033 U+20E3':
return "<span class='emoji emoji3320e3'></span>";
break;
case 'U+0034 U+20E3':
return "<span class='emoji emoji3420e3'></span>";
break;
case 'U+0035 U+20E3':
return "<span class='emoji emoji3520e3'></span>";
break;
case 'U+0036 U+20E3':
return "<span class='emoji emoji3620e3'></span>";
break;
case 'U+0037 U+20E3':
return "<span class='emoji emoji3720e3'></span>";
break;
case 'U+0038 U+20E3':
return "<span class='emoji emoji3820e3'></span>";
break;
case 'U+0039 U+20E3':
return "<span class='emoji emoji3920e3'></span>";
break;
case 'U+0023 U+20E3':
return "<span class='emoji emoji2320e3'></span>";
break;
default:
a=a.toLowerCase().substr(2);
return "<span class='emoji emoji"+a+"'></span>";
break;
}
});
} // 翻转web--app
var return_emojihtml;
function fanzhuan(str){
str=str.replace(regUtospan,function(a){
switch (a){
case 'U+0030 U+20E3':
return "0⃣";
break;
case 'U+0031 U+20E3':
return "1⃣";
break;
case 'U+0032 U+20E3':
return "2⃣";
break;
case 'U+0033 U+20E3':
return "3⃣";
break;
case 'U+0034 U+20E3':
return "4⃣";
break;
case 'U+0035 U+20E3':
return "5⃣";
break;
case 'U+0036 U+20E3':
return "6⃣";
break;
case 'U+0037 U+20E3':
return "7⃣";
break;
case 'U+0038 U+20E3':
return "8⃣";
break;
case 'U+0039 U+20E3':
return "9⃣";
break;
case 'U+0023 U+20E3':
return "#⃣";
break;
default:
outerxunhuan:
for(var i of arremoji_val){
for(var j in i){
if(a.toLowerCase()==i[j][0].toLowerCase()){
return_emojihtml=j;
break outerxunhuan;
}
}
}
// console.log(return_emojihtml);
return return_emojihtml;
break;
} })
return str;
} // html实体转化成u+
function tento16(str){
str=str.replace(/&#{1}[0-9]+;{1}/ig,function(a){
a=a.replace(/^&#{1}/ig,'');
a=a.replace(/;{1}$/ig,'');
a=parseFloat(a);
return 'u+'+ a.toString(16);
});
return str;
}
function utf16toEntities(str) {
var patt=/[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则
str = str.replace(patt, function(char){
var H, L, code;
if (char.length===2) {
H = char.charCodeAt(0); // 取出高位
L = char.charCodeAt(1); // 取出低位
code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
return "&#" + code + ";";
} else {
return char;
}
});
str=tento16(str);
return str;
} // web->app
var res_to_u,res_to_fwq;
function webtoapp(str){
// 转u+格式
res_to_u=toUnicode2(str);
// u+转span 展示图片
res_img=toUnicode(res_to_u);
// 发送表情文字笑脸给服务器
res_to_fwq=fanzhuan(res_to_u);
console.log(res_to_fwq,res_img);
}
// app->web
function apptoweb(str){
// 如果是app对web 将实体转化成u+;
res_to_u=utf16toEntities(str);
// 如果是web对web 转u+格式
res_to_u=toUnicode2(res_to_u);
// 转span背景图显示
res_img=toUnicode(res_to_u);
console.log(res_to_u,res_img);
}
demo地址:
链接:https://pan.baidu.com/s/17gh0aTxNLuXfNJyCTbfMSg 密码:39w0
关于emoji表情,支持在app端发送web端显示,web端发送给app端显示,web与wap端互相显示。的更多相关文章
- PHP如何处理emoji表情存入utf8的数据库
一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而em ...
- appium----adb shell输入中文/Emoji表情符(ADBKeyBoard)
前序 “adb shell input textyoyo“ 可以通过adb 输入英文的文本,由于不支持unicode编码,所以无法输入中文,github上有个国外的大神写了个ADBKeyBoard输入 ...
- php过滤文字中的表情字符和mysql服务端对emoji的支持
1.过滤emoji表情的原因 在我们的项目开发中,emoji表情是个麻烦的东西,即使我们可以能存储,也不一定能完美显示,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android.如果你需 ...
- mysql/Java服务端对emoji的支持
更改好后的字符集: 乱码 推荐大家看 深入MySQL字符集设置 ,区分检查client端.server端的编码:最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码. 比如使用python的My ...
- mysql/Java服务端对emoji的支持 专题
关于utf8不支持emoji是因为emoji是用4个字节存储的字符,而mysql的utf8只能存储1-3个字节的字符.那就存不了呗 需要更改的地方:(1)Mysql服务器client,mysql,my ...
- 让mysql支持emoji表情
一.问题及原因 APP产品想对Emoji进行支持,但发现mysql数据库无法写入表情.原因是我们的mysql数据库默认用的是utf8编码,utf8编码存储时用的是三个字节,但Emoji表情是4个字节, ...
- MySQL中支持emoji表情的存储
由于需要实现emoji表情评论的功能,所以数据库需要支持emoji表情的存储,根据查询的资料最终实现了该功能,现将实现的过程以及过程遇到的一些问题记录下来,供大家参考和交流. mysql的utf8编码 ...
- 教你如何让数据库支持emoji表情符存储
From: http://www.cnblogs.com/janehoo/archive/2016/04/06/5359800.html 一.教你如何让数据库支持emoji表情符存储 解决方式:更换字 ...
- mysql数据库字符集相关操作(修改表字段编码,使其支持emoji表情)
普通的UTF8编码是不支持emoji表情插入的,会报异常: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x9 ...
随机推荐
- tomcat集群搭建集成nginx负载均衡
软件基础+版本: 1.3台centos7系统,其中都已经配置完成了jdk环境,jdk的版本为 [root@node03 bin]# java -version java version "1 ...
- python 数组array的一些操作
对一些特定大小的元素进行操作 1.将数组Arr中大于100的值都设定为100 Arr[Arr >100] = 100 利用array索引的内置 numpy.minimum(Arr, 100 ...
- (转载)设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题
解决问题的博客地址:设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题 遇见的问题: 1.VMnet8无法设置为桥接模式 结论:只要主机网络可被桥接,VMnet8根本不需要设为桥接模 ...
- c数据结构 绪论
四种逻辑结构:1:集合结构 结构中的数据元素除了同属于同一个集合的关系外,无任何其他关系2:线性结构 结构中的数据元素之间存在着一对一的线性关系3:树形结构 结构中的数据元素之间存在着一对多的层次关系 ...
- IIS虚拟目录
https://blog.csdn.net/mianyao1004/article/details/94036169
- awk从放弃到入门(2):awk分隔符
一.awk分隔符 awk的默认分割符是空格,但是,这样描述并不精确,因为,awk的分隔符还分为两种,"输入分隔符" 和 "输出分隔符" . (1)输入分隔符:英 ...
- 每天进步一点点------Allegro 布线完成后如何修改线宽
一.如果要改变整个一条导线的宽度 1.在find栏里选择Cline; 2.在PCB中选择要改的导线,点击右键,选择Change Width 3.在对话框中输入你想要的线宽 3.如果要改变整个导线 ...
- gnuplot 让您的数据可视化
https://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html http://blog.sciencenet.cn/blog-3733 ...
- 在java中使用FFmpeg处理视频与音频
FFmpeg是一个非常好用的视频处理工具,下面讲讲如何在java中使用该工具类. 一.首先,让我们来认识一下FFmpeg在Dos界面的常见操作 1.拷贝视频,并指定新的视频的名字以及格式 ffmpeg ...
- MySQL-THINKPHP 商城系统一 商品模块的设计
在此之前,先了解下关于SPU及SKU的知识 SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.通俗点讲,属性值.特性相同的商品就可以称为一个SPU. ...