JS URL参数中文乱码问题及解决方法

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; //返回参数值
}  

这样的方式就可以将中文参数乱码的问题解决!

你可能感兴趣的:(JS URL参数中文乱码问题及解决方法)