最近在移動端項目中遇到一個坑,有幾個input表單提交給後臺的時候,會因爲input字段中出現emoji表情,而導致後臺(java)報錯。網上百度了半天,找到了一個解決辦法,親測有用。把代碼整理了一下:
/** * 用於把用utf16編碼的字符轉換成實體字符,以供後臺存儲 * @param {string} str 將要轉換的字符串,其中含有utf16字符將被自動檢出 * @return {string} 轉換後的字符串,utf16字符將被轉換成&#xxxx;形式的實體字符 */
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;
}
順便說一下,這個會把表情轉化成字符串,實際上還是改變了它原來的樣子,用戶其實還是更希望能直接發送表情吧。但是從來拉取數據後,在移動端還是能還原成emoji表情的。如果有大神知道怎樣直接提交表情(不通過轉化的方法) 還請告知小弟~多謝多謝~
原理參照原文地址:http://www.07net01.com/2015/08/896224.html