因为有的后台数据库配置不支持插入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
网友评论