可编辑div emoji 表情处理

DIV 设置可编辑 contenteditable=true

 <div contenteditable=true id="divTest"></div>

数据库存入需要将表设置为utf8mb4 编码格式

如果对数据处理,例如转为json数据,emoji 表情将无法存入数据库,需要对 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;
}
原文地址:https://www.cnblogs.com/xuey/p/12165434.html