unicode的那些坑:将emoji编码为unicode
问题描述:
例如贴吧、微博、论坛等有发帖和评论的功能,android、ios、前端需要对用户输入的emoji表情进行编码后存入数据库,保持三端统一,在内容显示上保持同步。
解决方案:
可以使用 unescape()
对 escape()
编码的字符串进行解码。
1、前端拿到数据后,通过unescape()
对unicode进行解码,可以正常显示emoji表情
2、前端提交数据时,需要把emoji编码传回给数据库
在这个一来一回的过程中,发现编码后的格式会出现误差,需要把符号替换成unicode格式
这样看似解决了问题,实际上前面还存在一个天坑等着你
天坑就是:escape()对特殊字符编码的问题,该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
升级版解决方案来了,既然escape()
不能处理上述的特殊字符,一不做二不休,直接不处理,仅仅只用escape()
编码emoji,过滤掉所有中文。
android、ios、前端都笑了