如何解決H5提交含有emoji表情的字段後臺報錯的問題

最近在移動端項目中遇到一個坑,有幾個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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章