h5即时通讯发送手机自带表情

刚开始写的时候没有注意到发送表情的特殊情情况   只考虑了  发送图片  文字  语音  情况  后来测试 在发送文字的时候  添加 手机自带的 表情   发现发过去之后表情不见了  查看数据库之后发现根本就没有存入进去  后来经过调试发现表情是utf16 的一个编码方式 所以之前发送存入数据库的时候就会出现错误而将表情舍弃掉 所以后来的解决方法为在将发送内容传输至后台处理之前就将表情转码  utf16位的转码:

(如下)

    //将16进制的表情转码
    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;
    }

  转码过之后在将之存入数据库  在显示到手机上发现一切正常

效果就是这样喽    用到的老铁可以试一下   bingo!!

猜你喜欢

转载自www.cnblogs.com/gaozhongye/p/12956784.html