JS URL参数中文乱码问题及解决方法
例如带中文参数乱码的url:http://localhost:8080/demo/test.html?message=%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7。
test.html
html 代码
//获取url中的参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if(r != null) return unescape(r[2]); //unescape参数内容。
return null; //返回参数值
}
var message = getUrlParam('message');
//messsage如果没有执行unescape 得到的是%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7
//如果执行了unescape得到的是一串不可识别的乱码。
其实%E7%BB%A7%E7%BB%AD%E7%94%B3%E8%AF%B7就是继续增加的UT-8 URL编码之后的值,通过UTF-8 URL 编码工具可以解码出来。解码代码如下:
html 代码
//将URL中的UTF-8字符串转成中文字符串
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;
}
//将编码转换成字符
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));
}
调用方式
html 代码
//获取url中的参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if(r != null) return unescape(getCharFromUtf8(r[2]); //增加UTF-8解码处理。
return null; //返回参数值
}
这样的方式就可以将中文参数乱码的问题解决!