原文
為了防止xss以及csrf+xss的漏洞,後台統一對字串進行了轉碼。結果如下:
原文: JavaScript進階程式設計
編碼: JavaScript高级程序设计
前端寫了一段如下代碼:
function u2str(text){// transform text in utf8 format to string
return unescape(text.replace(/&#/g,'%u').replace(/;/g,''));
}
對普通的中文沒問題,但是對上面的中英文載入的文本,這個函數就會返回亂碼。
我們可以使用原生的Javascript代碼來進行轉義。該編碼其實不是utf8,而是unicode編碼。這裡的字元實際上是html實體。
var decodeHtmlEntity =function(str){
return str.replace(/&#(\d+);/g,function(match, dec){
return String.fromCharCode(dec);
});
};
輸入:
var str ='JavaScript高级程序设计';
console.log(decodeHtmlEntity(str));
輸出:
JavaScript進階程式設計
以下代碼用於將正常的字元轉變為html實體
var encodeHtmlEntity =function(str){
var buf =[];
for(var i=str.length-1;i>=0;i--){
buf.unshift(['&#', str[i].charCodeAt(),';'].join(''));
}
return buf.join('');
};
輸入:
var str ='進階程式設計';
console.log(encodeHtmlEntity(str));
輸出:
高级程序设计