如何处理ios emoji表情处理

emoji表情过滤处理
作者:用户
本文讲的是emoji表情过滤处理,
微信消息接口开发时,消息体包含emoji表情时,不考虑存储emoji表情,可使用preg_replace函数过滤替换,PHP如下: ...$content=json_decode(preg_replace(&#(///ud[0-9a-f]
微信消息接口时,消息体包含emoji表情时,不考虑存储emoji表情,可使用preg_replace函数过滤替换,如下: ...$content=json_decode(preg_replace("#(///ud[0-9a-f]{3}|///u2(6|7)[0-9a-f]{2})#ie","",json_encode($content)));... PS:消息体里的基本表情代码前台可以用js匹配替换为表情图片显示 function rep_str(a){ var b=''; a=a.replace(///::/)/g,b+'0'+c); a=a.replace(///::~/g,b+'1'+c); a=a.replace(///::B/g,b+'2'+c); a=a.replace(///::/|/g,b+'3'+c); a=a.replace(///:8-/)/g,b+'4'+c); a=a.replace(///::,b+'5'+c); a=a.replace(///::&/g,b+'5'+c); a=a.replace(///::/$/g,b+'6'+c); a=a.replace(///::X/g,b+'7'+c); a=a.replace(///::Z/g,b+'8'+c); a=a.replace(///::'/(/g,b+'9'+c); a=a.replace(///:://'/(/g,b+'9'+c); a=a.replace(///::-/|/g,b+'10'+c); a=a.replace(///::@/g,b+'11'+c); a=a.replace(///::P/g,b+'12'+c); a=a.replace(///::D/g,b+'13'+c); a=a.replace(///::O/g,b+'14'+c); a=a.replace(///::/(/g,b+'15'+c); a=a.replace(///::/+/g,b+'16'+c); a=a.replace(///:--b/g,b+'17'+c); a=a.replace(///::Q/g,b+'18'+c); a=a.replace(///::T/g,b+'19'+c); a=a.replace(///:,@P/g,b+'20'+c); a=a.replace(///:,@-D/g,b+'21'+c); a=a.replace(///::d/g,b+'22'+c); a=a.replace(///:,@o/g,b+'23'+c); a=a.replace(///::g/g,b+'24'+c); a=a.replace(///:/|-/)/g,b+'25'+c); a=a.replace(///::!/g,b+'26'+c); a=a.replace(///::L/g,b+'27'+c); a=a.replace(///::&/g,b+'28'+c); a=a.replace(///::&/g,b+'28'+c); a=a.replace(///::,@/g,b+'29'+c); a=a.replace(///:,@f/g,b+'30'+c); a=a.replace(///::-S/g,b+'31'+c); a=a.replace(///:/?/g,b+'32'+c); a=a.replace(///:,@x/g,b+'33'+c); a=a.replace(///:,@@/g,b+'34'+c); a=a.replace(///::8/g,b+'35'+c); a=a.replace(///:,@!/g,b+'36'+c); a=a.replace(///:!!!/g,b+'37'+c); a=a.replace(///:xx/g,b+'38'+c); a=a.replace(///:bye/g,b+'39'+c); a=a.replace(///:wipe/g,b+'40'+c); a=a.replace(///:dig/g,b+'41'+c); a=a.replace(///:handclap/g,b+'42'+c); a=a.replace(///:&-/(/g,b+'43'+c); a=a.replace(///:&-/(/g,b+'43'+c); a=a.replace(///:B-/)/g,b+'44'+c); a=a.replace(///:&@/g,b+'45'+c); a=a.replace(///:&@/g,b+'45'+c); a=a.replace(///:@&/g,b+'46'+c); a=a.replace(///:@&/g,b+'46'+c); a=a.replace(///::-O/g,b+'47'+c); a=a.replace(///:&-/|/g,b+'48'+c); a=a.replace(///:&-/|/g,b+'48'+c); a=a.replace(///:P-/(/g,b+'49'+c); a=a.replace(///:://'/|/g,b+'50'+c); a=a.replace(///:X-/)/g,b+'51'+c); a=a.replace(///::/*/g,b+'52'+c); a=a.replace(///:@x/g,b+'53'+c); a=a.replace(///:8/*/g,b+'54'+c); a=a.replace(///:pd/g,b+'55'+c); a=a.replace(///:/g,b+'56'+c); a=a.replace(///:&W&/g,b+'56'+c); a=a.replace(///:beer/g,b+'57'+c); a=a.replace(///:basketb/g,b+'58'+c); a=a.replace(///:oo/g,b+'59'+c); a=a.replace(///:coffee/g,b+'60'+c); a=a.replace(///:eat/g,b+'61'+c); a=a.replace(///:pig/g,b+'62'+c); a=a.replace(///:rose/g,b+'63'+c); a=a.replace(///:fade/g,b+'64'+c); a=a.replace(///:showlove/g,b+'65'+c); a=a.replace(///:heart/g,b+'66'+c); a=a.replace(///:break/g,b+'67'+c); a=a.replace(///:cake/g,b+'68'+c); a=a.replace(///:li/g,b+'69'+c); a=a.replace(///:bome/g,b+'70'+c); a=a.replace(///:kn/g,b+'71'+c); a=a.replace(///:footb/g,b+'72'+c); a=a.replace(///:ladybug/g,b+'73'+c); a=a.replace(///:shit/g,b+'74'+c); a=a.replace(///:moon/g,b+'75'+c); a=a.replace(///:sun/g,b+'76'+c); a=a.replace(///:gift/g,b+'77'+c); a=a.replace(///:hug/g,b+'78'+c); a=a.replace(///:strong/g,b+'79'+c); a=a.replace(///:weak/g,b+'80'+c); a=a.replace(///:share/g,b+'81'+c); a=a.replace(///:v/g,b+'82'+c); a=a.replace(///:@/)/g,b+'83'+c); a=a.replace(///:jj/g,b+'84'+c); a=a.replace(///:@@/g,b+'85'+c); a=a.replace(///:bad/g,b+'86'+c); a=a.replace(///:lvu/g,b+'87'+c); a=a.replace(///:no/g,b+'88'+c); a=a.replace(///:ok/g,b+'89'+c); a=a.replace(///:love/g,b+'90'+c); a=a.replace(///:/g,b+'91'+c); a=a.replace(///:&L&/g,b+'91'+c); a=a.replace(///:jump/g,b+'92'+c); a=a.replace(///:shake/g,b+'93'+c); a=a.replace(///:/g,b+'94'+c); a=a.replace(///:&O&/g,b+'91'+c); a=a.replace(///:circle/g,b+'95'+c); a=a.replace(///:kotow/g,b+'96'+c); a=a.replace(///:turn/g,b+'97'+c); a=a.replace(///:skip/g,b+'98'+c); a=a.replace(//[挥手]/g,b+'99'+c); a=a.replace(///:oY/g,b+'99'+c); a=a.replace(///:#/-0/g,b+'100'+c); a=a.replace(//[街舞]/g,b+'101'+c); a=a.replace(///:kiss/g,b+'102'+c); a=a.replace(///:&&/g,b+'103'+c); a=a.replace(///:&&/g,b+'103'+c); a=a.replace(///:&&/g,b+'104'+c); a=a.replace(///:&&/g,b+'104'+c);} ------------------------------------------------------------------------------------------------------------ 项目背景:活动微信留言墙 项目时间:2016-02
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索表情
,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
IT采购开年惠,百款产品5折起,新购满额再返最高6000!
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!3种方法轻松处理php开发中emoji表情的问题
转载 & & 投稿:daisy
移动设备经常会发生用户发送的内容中包含emoji表情,未经处理,在显示时就是乱码。所以本文介绍在PHP微信开发中涉及到emoji表情的几种处理方法。
做微信开发的时候就会发现,存储微信昵称必不可少。
可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了
一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?
原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢?我来介绍几种方法
1、使用utf8mb4字符集
如果你的mysql版本&=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集
这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案
至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的
2、使用base64编码
如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国
使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可
3、干掉emoji表情
emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示。在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本
经过一番苦苦的google,终于找到靠谱能用的代码:
// 过滤掉emoji表情
function filterEmoji($str)
$str = preg_replace_callback(
function (array $match) {
return strlen($match[0]) &= 4 ? '' : $match[0];
以上就是为大家总结的PHP微信开发中涉及到emoji表情的几种处理方法,基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。希望大家喜欢!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具emoji表情处理 - hellohero - 博客园
今天做一个app端提交论坛帖子的时候用户提交了android自带的emoji表情导致数据库一直不通过,很头疼的问题,虽然我也喜欢发表情-。-但是这个代码中遇到表情需要处理的时候,真就呵呵呵呵了~~
通过查看日志可以看出来:
Incorrect string value: '\xF0\x9F\x91\x8D\xE6\x94...' for column 'context' at row&2599
在查阅资料后发现这其实是一种emoji表情符号,普遍存在iOS与android系统中,而这种特殊字符合作用的Unicode 6标准来统一,采用4个bytes来存储一个emoji表情,而将这种表情不处理直接存储到MySQL5.5以下的版本会报错~~
那么问题来了:这么可爱的表情你是要存呢,还是要存呢,还是要.....有几种解决方式吧,看自己的项目中的需求了。
如果你需要将这种存到数据库的话:
1)确保你的数据库(我用的mysql,其他的没试验,不敢乱说)版本5.5以上
2)然后将存数该表情的字段的字符集设置成utf8mb4
3)将该表的字符集设置成utf8mb4
4)最后将该表所在的数据库的字符集设置成utf8mb4
重启mysql。binggo
但是这种处理方式带来的问题是数据传回客户端或者网页的时候需要做兼容处理。麻烦!
第二种,如果你可以暂时忽略他的时候,那就简单了,解决代码贴出来:
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);Matcher emojiMatcher = emoji.matcher(req.getContent());if(emojiMatcher.find()){
System.out.println("我是emoji表情,可以忽略");}不要问我emoji表情的unicode怎么来的,因为我也是google的-。-iOS—emoji表情处理 - 简书
iOS—emoji表情处理
在发送网络请求时,由于用户输入了emoji表情,服务端返回错误提示信息。为了解决服务器不能验证emoji编码的问题,需要在本地进行emoji的输入控制(正常情况下应该由服务器在数据库中添加emoji对应的转码表以支持客户端发送emoji表情),在网上搜了下iOS端解决办法如下:
1.当用户切换键盘为Emoji表情时,输入的表情不响应(即表情符号不显示到UITextView或UITextField)。这里可以通过UITextView或UITextField的回调和是否为emoji键盘:
[[[textView textInputMode] primaryLanguage] isEqualToString:@"emoji"]
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//不支持系统表情的输入
if ([[[UITextInputMode currentInputMode ]primaryLanguage] isEqualToString:@"emoji"]) {
return NO;
return YES;
2.通过过滤用户输入的emoji来实现
//过滤表情
+ (NSString *)filterEmoji:(NSString *)string {
NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
const char *utf8 = [string UTF8String];
char *newUTF8 = malloc( sizeof(char) * len );
int j = 0;
//0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4)
for ( int i = 0; i & i++ ) {
unsigned int c = utf8;
BOOL isControlChar = NO;
i = i + 3;
isControlChar = YES;
i = i + 2;
isControlChar = YES;
i = i + 1;
isControlChar = YES;
if ( !isControlChar ) {
newUTF8[j] = utf8;
newUTF8[j] = '\0';
NSString *encrypted = [NSString stringWithCString:(const char*)newUTF8
encoding:NSUTF8StringEncoding];
free( newUTF8 );
3.通过判断用户输入的字符串时候含有表情来进行对应的操作
+ (NSString *)filterEmoji:(NSString *)string {
NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
const char *utf8 = [string UTF8String];
char *newUTF8 = malloc( sizeof(char) * len );
int j = 0;
//0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4)
for ( int i = 0; i & i++ ) {
unsigned int c = utf8;
BOOL isControlChar = NO;
i = i + 3;
isControlChar = YES;
i = i + 2;
isControlChar = YES;
i = i + 1;
isControlChar = YES;
if ( !isControlChar ) {
newUTF8[j] = utf8;
newUTF8[j] = '\0';
NSString *encrypted = [NSString stringWithCString:(const char*)newUTF8
encoding:NSUTF8StringEncoding];
free( newUTF8 );
emoji在NSUTF8StringEncoding编码下占用4个字节,中文编码占用3个字节,可以根据- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string方法,把string做处理,依据
NSUInteger stringUtf8Length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
if(stringUtf8Length &= 4 && (stringUtf8Length / string.length != 3)) {
return NO;
判断,可排出大多数表情符号,还有少量的符号排除不了,比如_ ,占3个字符。
代码不实用在九宫格键盘上的,可以在输入时打断点查看内容或直接输出%x查看。
UITextView/UITextField检测并过滤Emoji表情符号 本人在开发过程中遇到过这种情况,服务器端不支持Emoji表情,因此要求客户端在上传用户输入时,不能包含Emoji表情。在客户端发送请求前,判断用户输入中是否含有表情,如果含有表情,则提示用户重新输入。...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
捣鼓了半天 终于把自己的博客搭建好了,发一篇文章试试手。公司里的服务器比较low,不能支持emoji表情,本意是解决这个问题,自定义一个UITextField的控件。后来索性把长度校验也做了进去,基本满足了正常的需求。 我的博客 http://www.linit.space...
1、设置UILabel行间距 NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphS...
1、设置UILabel行间距 NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphS...
一个人,不管是刚毕业的大学生,或是已工作过多年的社会人员;在择业选择方面,不管是选择就业,还是选择创业;基本上都是在围绕三个核心要素在判断,简单讲就是“生存、经验、发展”。对于生存而言,主要指的就是人们所说的“收获”,只有当他个人内心对某个平台或职业感觉能够真正得到收获时,...
“我不缺朋友,只缺你” 没有谁会真正喜欢做朋友, 只是爱情无望, 就用友情来圆谎。 都说一见杨过误终生,可是和你一直在一起就是我的想要的终生啊。 绍兴的冬天来了,前些天挤着公交赶回学校,车厢里攒动的人头交织着污浊的空气让我的着急混合着烦闷涌上心房。快下车的时候我接到一个电话...
一切都停格在我能想到的最糟糕的那一天 你知道吗我每天都在幻想如果那个时候好好听你的话跟你解释就好了,可是回不去了。 你和她当时多亲密多暧昧啊,我只能看着然后无奈笑着,终于我忍不住了,说要见她跟她谈谈,你就急了,趁我去洗头发跟我发了一大堆。 我看见的时候心都要碎了,我知道,完...
妈妈当然是我的购物启蒙。 从我有记忆开始 百货大楼就是小公主的买买买圣地。买衣裤鞋,买家电。可我从没见她买过化妆品。 那时候还没有自在shopping mall,百货大楼真的凑一百多种商品。只有购物,没有其他休闲娱乐美食。我和大师兄每次作陪都是辛苦事。 最可怕是买衣物。小公...如何处理emoji表情更好一点
现在前端框里面的表情用类似哭这样的符号代替
处理方式:
1.入库的时候,把表情替换成&img src=”1.gif”& 读取时候方便,但是不利于后期维护2.直接入库,读取的时候在后台处理。可能会浪费时间。3.也是直接入库,读取完成后,丢到前端让js来替换。这个会使前端加载一个大的js数组
哪个更好呢?
utf8mb4编码是支持emoji表情的。
1.mysql 5.6可以支持emoj表情了http://www.linuxde.net/30;2.MySQL其他版本的,可以使用urlencode转换或者以base64加密,缺点是增加了数据的长度,而且每次写入读取都要转换
毋庸置疑最后一种最优,原因只有一个兼容性;不同环境各自处理,比如:web、移动端。
几种办法1.使用第三方API,比如新浪微博的表情API,这样不用你去费心2,在后台输出的时候替换,像这种方法主要是照顾垃圾配置的电脑,你永远不要高看用户的电脑配置3,前台替换,js正则替换成你第一种方法就行了,比如 [哈哈] 替换成&img src=’哈哈.gif’/&
我是这么做的,用户输入的emoji会被js替换为
1[emiji-&UTF8CODE&]
的形式,存到数据库里,显示的时候替换为
1&i class=&emoji emoji-&UTF8CODE&&&&/i&
的形式,然后只需要维护一个超大的css文件就可以了,可以把emoji图片转换成雪碧图,这样后期的维护就更容易了。
你可以参考emojione的实现
utf8mb4是可以直接保存转码的, 注意框架获取表单数据的方法一般都有过滤函数 一定要去掉 不然会取不到值的
本文出自操他妈,转载时请注明出处及相应链接。
本文永久链接: http://www.caotama.com/99508.html
0 , , ,
Ɣ回顶部}

我要回帖

更多关于 ios emoji表情处理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信