JS URL參數(shù)中文亂碼問題及解決方法
例如帶中文參數(shù)亂碼的url:http://localhost:8080/demo/test.html?message=%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7。
test.html
html 代碼
//獲取url中的參數(shù)
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構(gòu)造一個含有目標(biāo)參數(shù)的正則表達(dá)式對象
var r = window.location.search.substr(1).match(reg); //匹配目標(biāo)參數(shù)
if(r != null) return unescape(r[2]); //unescape參數(shù)內(nèi)容俊庇。
return null; //返回參數(shù)值
}
var message = getUrlParam('message');
//messsage如果沒有執(zhí)行unescape 得到的是%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7
//如果執(zhí)行了unescape得到的是一串不可識別的亂碼。
其實(shí)%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7就是繼續(xù)增加的UT-8 URL編碼之后的值淳地,通過UTF-8 URL 編碼工具可以解碼出來值朋。解碼代碼如下:
html 代碼
//將URL中的UTF-8字符串轉(zhuǎn)成中文字符串
function getCharFromUtf8(str) {
var cstr = "";
var nOffset = 0;
if (str == "")
return "";
str = str.toLowerCase();
nOffset = str.indexOf("%e");
if (nOffset == -1)
return str;
while (nOffset != -1) {
cstr += str.substr(0, nOffset);
str = str.substr(nOffset, str.length - nOffset);
if (str == "" || str.length < 9)
return cstr;
cstr += utf8ToChar(str.substr(0, 9));
str = str.substr(9, str.length - 9);
nOffset = str.indexOf("%e");
}
return cstr + str;
}
//將編碼轉(zhuǎn)換成字符
function utf8ToChar(str) {
var iCode, iCode1, iCode2;
iCode = parseInt("0x" + str.substr(1, 2));
iCode1 = parseInt("0x" + str.substr(4, 2));
iCode2 = parseInt("0x" + str.substr(7, 2));
return String.fromCharCode(((iCode & 0x0F) << 12) | ((iCode1 & 0x3F) << 6) | (iCode2 & 0x3F));
}
調(diào)用方式
html 代碼
//獲取url中的參數(shù)
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構(gòu)造一個含有目標(biāo)參數(shù)的正則表達(dá)式對象
var r = window.location.search.substr(1).match(reg); //匹配目標(biāo)參數(shù)
if(r != null) return unescape(getCharFromUtf8(r[2]); //增加UTF-8解碼處理矗积。
return null; //返回參數(shù)值
}
這樣的方式就可以將中文參數(shù)亂碼的問題解決辨绊!