1. 程式人生 > >獲取使用者輸入的表情, 轉碼,解碼

獲取使用者輸入的表情, 轉碼,解碼

前端在頁面中獲取使用者輸入,有時候會碰到表情輸入,如果之間傳給後端是不行的, 會顯示空字元.

前端解決的方案:

         在提交資料時,通過正則獲取所有的emoji表情,將其轉成 base64 ,然後提交給後臺,後臺不需要做任何操作,當請求資料時再原封不動的返給前端,前端對資料進行過濾,轉換成表情。

// 將其轉成 base64
   utf16toEntities:function(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;
  },

解碼

uncodeUtf16:function(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;
  },