前端emoji表情字符串处理

emoji表情存储需要数据库存储字段的编码方式为utf8mb4,且该编码方式需数据库为 5.5.3 及以上版本。而且发现设置了utf8mb4编码后,还是会有部分emoji表情存储不了,所以改用前端转码后再存入数据库,读取的时候再解码:

转码:

function utf16toEntities(str) { 
        var patt=/[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则 
        str = str.replace(patt, function(char){ 
                var H, L, code; 
                if (char.length===2) { 
                    H = char.charCodeAt(0); // 取出高位 
                    L = char.charCodeAt(1); // 取出低位 
                    code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法 
                    return "&#" + code + ";"; 
                } else { 
                    return char; 
                } 
            }); 
        return str; 
    }

解码:

function uncodeUtf16(str){
        var reg = /\&#.*?;/g;
        var result = str.replace(reg,function(char){
            var H,L,code;
            if(char.length == 9 ){
                code = parseInt(char.match(/[0-9]+/g));
                H = Math.floor((code-0x10000) / 0x400)+0xD800;
                L = (code - 0x10000) % 0x400 + 0xDC00;
                return unescape("%u"+H.toString(16)+"%u"+L.toString(16));
            }else{
                return char;
            }
        });
        return result;
    }

参考:
移动前端手机输入法自带emoji表情字符处理

你可能感兴趣的:(前端emoji表情字符串处理)