2017年8月1日 星期二

JavaScript 對於字串內含有 Unicode 編碼的處理方式

在 Web 應用程式上要做關鍵字搜尋時,用的是自製的搜尋元件,前端與後端都是自製的。一直以來都沒有什麼問題,而這次的新案子測試人員發現罕用字出現了問題。

輸入關鍵字,查詢出來顯示時還是正常的,點選需要的資料帶入 textbox 時,罕用字卻變成了 &#xxxxx; 這樣的型式 (xxxxx 是10進位數字)

嘗試了呼叫 unescape、decodeURI、decodeURIComponent 都無法處理

後來只好問 google,找到一些資料之後,寫成以下的 function,提供出來給大家參考:

//--------------------------------------------
//  將字串裡的 unicode 換成文字
//--------------------------------------------
function ConvertUnicode(str)
{
    // 先處理 \uXXXX 這種型式的
    str = unescape(str);
    // 然後再處理 &#XXXXX; 這種型式的
    var regexp = /&#[0-9]+;/g;
    var match = regexp.exec(str);
    while (match !== null)
    {
        var s = String.fromCharCode(match[0].replace(/[&#;]/g, ""));
        str = str.replace(new RegExp(match[0], "g"), s);
        match = regexp.exec(str);
    }
    return str;
}