獲取使用者輸入的表情, 轉碼,解碼
阿新 • • 發佈:2018-12-16
前端在頁面中獲取使用者輸入,有時候會碰到表情輸入,如果之間傳給後端是不行的, 會顯示空字元.
前端解決的方案:
在提交資料時,通過正則獲取所有的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; },