URL中的參數獲取時亂碼問題以及參數傳遞問題
中文變奇怪字符,如:ä½ å¥½ 或者 ÄãºÃ
"你好Java" ------> "ä½ å¥½Java"
原字符串:“你好Java”
你 | 好 | J | a | v | a |
---|---|---|---|---|---|
4f60 | 597d | 4a | 61 | 76 | 61 |
經UTF-8編碼後,一箇中文用三個字節表示:
你 | 好 | J | a | v | a |
---|---|---|---|---|---|
e4 bd a0 | e5 a5 bd | 4a | 61 | 76 | 61 |
亂碼原因:UTF8編碼或GBK編碼,再由ISO8859-1解碼。對照ISO8859-1編碼表後發現:e4 bd a0分別對應三個字符:"ä½ “,e5 a5 bd分別對應三個字符"好”,
傳遞參數的頁面
function judge() {
var Data = {
fwdz: $("#fwdz").val(),
sjhm: $("#sjhm").val()
}
console.log(Data)
$(document).on("click", "#commitBtn", function() {
$.modal({
title: "提示",
text: "信息",
buttons: [
{ text: "取消", onCancel: function(){ }},
{ text: "確定", onClick: function(){
if(request.id=='0'){
window.location.href="../j/j.html?id=0&data="+JSON.stringify(Data)
} else {
window.location.href="../j/j.html?id=1&data="+JSON.stringify(Data)
}
}}
]
});
});
}
接收參數的頁面
var fwsbdata =JSON.parse(encodeUTF8(request.fwsbdata))
/*url請求攔截*/
var request = (function () {
var obj = {};
var arr = window.location.search.slice(1).split("&");
for (var i = 0, len = arr.length; i < len; i++) {
var nv = arr[i].split("=");
obj[unescape(nv[0]).toLowerCase()] = unescape(nv[1]);
}
return obj;
})()
/*解決亂碼問題---UTF8編碼或GBK編碼,再由ISO8859-1解碼*/
function encodeUTF8(str) {
var rs = '';
for(var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
if((240 & code) == 240) {
var code1 = str.charCodeAt(i + 1),
code2 = str.charCodeAt(i + 2),
code3 = str.charCodeAt(i + 3);
rs += String.fromCodePoint(((code & 7) << 18) | ((code1 & 63) << 12) | ((code2 & 63) << 6) | (code3 & 63));
i += 3;
} else if((224 & code) == 224) {
var code1 = str.charCodeAt(i + 1),
code2 = str.charCodeAt(i + 2);
rs += String.fromCodePoint(((code & 15) << 12) | ((code1 & 63) << 6) | (code2 & 63));
i += 2;
} else if((192 & code) == 192) {
var code1 = str.charCodeAt(i + 1);
rs += String.fromCodePoint(((code & 31) << 6) | (code1 & 63));
i++;
} else if((128 & code) == 0) {
rs += String.fromCharCode(code);
}
}
return rs;
}
web開發中的亂碼問題
鏈接:https://www.jianshu.com/p/63c7ad13907a