NCR(numeric character reference)字符轉換成真實字符

1、問題

開發中發現這種情況,中文變成了奇怪的字符,由 &# + 數字 + 分號組成,比如訂單列表變成了 订单列表
這種稱爲NCR(numeric character reference)

字符值引用(numeric character reference, NCR)是在標記語言SGML以及派生的如HTML與XML中常見的一種轉義序列結構,用來表示Unicode的通用字符集 (UCS)中的單個字符. NCR可以表示在一個特定文檔中不能直接編碼的字符,而該標記語言閱讀器軟件把每個NCR當作一個字符來處理。

2、NCR字符轉換

使用StringEscapeUtils將普通漢字轉爲NCR:

public class SongsirTest {
    public static void main(String[] args) {
        String s = "訂單列表";
        System.out.println(StringEscapeUtils.escapeHtml(s));
    }
}
輸出結果:
订单列表

使用StringEscapeUtils將NCR轉爲普通字符:

public static void main(String[] args) {
    String s = "订单列表";
    System.out.println(StringEscapeUtils.unescapeHtml(s));
}
輸出結果:訂單列表  

3、在前端將NCR轉爲普通字符

var title = "订单列表"
var regex = /&#(\d+);/g;
title = title.replace(regex, function(_, $1) {
    return String.fromCharCode($1);
})

注:系統爲了防止注入攻擊後臺將請求轉爲了NCR導致漢字在前端展示異常。

參考:https://segmentfault.com/a/1190000005109547

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章