iOS过滤emoji (处理文本输入框的系统表情)

转载 2016年08月29日 14:15:06

         服务器对emoji表情直接保存不兼容, 如果客户端直接把表情符号传给服务端保存的话, 会得到一个保存失败的错误

        swift过滤字符串

       





  • pragma mark - <UITextViewDelegate>
    
    - (void)textViewDidChange:(UITextView *)textView
    {
        NSLog(@"没有过滤前输入的字符串===%@",textView.text);
        NSString *filterString = [self disableEmoji:textView.text];
        NSLog(@"过滤Emoji表情后的字符串===%@",filterString);
        textView.text = filterString;
    }
    
    /**
     *  正则过滤表情
     */
    - (NSString *)disableEmoji:(NSString *)text
    {
        if (!text.length) return text;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
        NSString *modifiedString = [regex stringByReplacingMatchesInString:text
                                                                   options:0
                                                                     range:NSMakeRange(0, [text length])
                                                              withTemplate:@""];
        return modifiedString;
    }
     OC 过滤的方法
  • 办法二:

    • 第二种办法可以联想到我们在请求有中文链接的网址时会请求失败, 正常的处理是先把含有中文的网址进行编码后在请求就会成功, 因此,我们保存表情时也可以你用这种办法;

    注意: 这里在你把转码后的操作发给服务器后, 需要做的一个额外操作就是, 你再从服务器去回来显示时, 需要反转一下之前的编码才能正常显示出表情符号, 否则就是一堆乱码, 如: 123456%F0%9F%98%83%E2%98%BA%F0%9F%98%9A%F0%9F%98%99%F0%9F%99%8412 ;

    1. 把含有表情的字符串进行编码后再发送给服务端:

      NSString *inputText = [self.editTextView.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      • 注意: 这里如果你输入的字符串中已经含有一些已转义的特殊符号: % @ $等时, 上面的方法就不会再对这些特殊的进行转码, 可以使用下面的方法
        NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8);
    2. 对从服务器获取回来含有表情的字符串进行反转后显示在页面上:

      NSString *showText = [serverString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    3. 把编码的字符串反转之后的显示效果图:




    办法三:

    • 第三中办法就是把输入的表情转成NSData的二进制数据传给服务器;
      NSData *data =[inputText dataUsingEncoding:NSUTF8StringEncoding];
      不过这种办法比较麻烦, 不建议使用这种方法;

    原文链接:http://www.jianshu.com/p/aa559c913323









  • 相关文章推荐

    XEditText:带删除功能的EditText;可设置自动添加分隔符分割电话号码、银行卡号等;支持禁止Emoji表情符号输入;自定义右边显示图标作功能选项;仿iOS输入框风格

    继承EditText封装了一个多项功能的XEditText,具体非常实用的功能。具有如下特点: 自带清除功能图标,点击清除输入内容 输入时手机号时自动分割:138 0000 0000,提高用户体验,轻...

    Android-->轻松打造带删除按钮的输入框(EditText),附Emoji表情过滤

    输入框带删除按钮, 此乃标配, 实现起来方法也很多, 网上开源也很多.但是, 没事就喜欢瞎折腾.上图说话. 只是在原生的基础上加了扩展. 相对来说入侵非常少, 使用方法和原生的一模一样.无任何阉割....
    • angcyo
    • angcyo
    • 2016年11月20日 12:04
    • 1804

    jquery样式emoji表情加输入框

    • 2017年08月15日 18:46
    • 3.22MB
    • 下载

    android 输入框EditText禁止输入Emoji表情符

    通过添加EditText的addTextChangedListener()监听来过滤Emoji表情: onTextChanged()beforeTextChanged()使用方法 在开...

    android 输入框EditText禁止输入Emoji表情符

    android 输入框EditText禁止输入Emoji表情符 转载请注明出处:http://blog.csdn.net/elsdnwn/article/details/45390771 通过添加...
    • elsdnwn
    • elsdnwn
    • 2015年04月30日 09:38
    • 19340

    android 输入框EditText禁止输入Emoji表情符

    通过添加EditText的addTextChangedListener()监听来过滤Emoji表情: onTextChanged()beforeTextChanged()使用方法 在开...

    android 输入框EditText禁止输入Emoji表情符

    import android.content.Context; import android.text.Editable; import android.text.Selection; import ...

    IOS或者Android传递 含有emoji表情的文本到服务器之php处理方式

    微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没有解码,表现就是当收到微信端用户发来的emoji表情时,显示为一个方块型「」或是无法显示的字符,这时就需要对其进行转码。同理在向微信...

    iOS开源组件__仿写QQ/微信聊天键盘(表情,问题,输入框)纯代码,无依赖

    iOS开源组件__仿写QQ/微信聊天键盘(表情,问题,输入框)纯代码,无依赖
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:iOS过滤emoji (处理文本输入框的系统表情)
    举报原因:
    原因补充:

    (最多只允许输入30个字)