美文网首页
iOS 限制Emoji表情输入

iOS 限制Emoji表情输入

作者: 欢乐的乐 | 来源:发表于2018-08-15 18:08 被阅读18次

因为有的后台数据库配置不支持插入UTF-8四个字节的字符,所以前端如果post请求带有😝Emoji表情,后台就会报错,返回请求失败。

1. 错误的代码

一开始的想法都是百度如何过滤😝Emoji表情,我一开始也是写了很多的过滤。


过滤Emoji.jpg

后来发现,这样做发现很多的中文字符也被过滤了,无法输入。同时,也有可能漏掉部分的😝Emoji表情没有过滤。

2. 正确的代码

想了一下,应该是判断输入的字节长度是否是大于等于四个。只要数据是数据库支持的就可以了。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        initView()
    }
    
    func initView() {
        textField.delegate = self
    }


}

extension ViewController: UITextFieldDelegate {
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        return !string.characterCodingOut
    }
    
}

extension String {
    
    var characterCodingOut: Bool {
        /* 遍历字符串的每一个字符 */
        for str in self {
            var byteCount = 0
            /* 计算字符串的编码字节长度 */
            /* UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 */
            for _ in String(str).utf8 {
                byteCount = byteCount + 1
            }
            /* 大于等于四个字节的禁止输入 */
            if byteCount >= 4 {
                return true
            }
        }
        return false
    }
    
}


好好学习,天天向上。<( ̄oo, ̄)/


Potato_zero.jpg

相关文章

网友评论

      本文标题:iOS 限制Emoji表情输入

      本文链接:https://www.haomeiwen.com/subject/skowbftx.html