在项目开发中,我们有时往往需要向地址栏传递参数,有时也需要获取地址栏里的参数,获取英文或数字的方法,我相信大家都不陌生,可是如果是中文呢,小萌用同样的方法获取中文的时候出现了乱码……/(ㄒoㄒ)/~~那么今天小萌分享下关于地址栏传递的中文参数,获取出现乱码的解决方法。

首先我们来简单介绍?#20081;?#33324;情况下,用JS获取地址栏参数的方法:

function GetQueryString(name){
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]);
     return null;
}

调用方法:GetQueryString(“参数名”)就可以啦。

用上面的方法获取中文的时候,会出现乱码的现象,这是编码问题在作祟,原来客户端默认使用javascript的encodeURI函数对URL进行编码,在解码的时候就需要使用decodeURI 而不是 unescape。所以想要获取中文并?#20063;?#20986;现乱码使用以下代码即可:

function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r != null) return decodeURI(r[2]);
    return null;
}

在查找解决问题方法的时候,看到有人说把decodeURI替换为decodeURIComponent也可使用。小萌不明所以,就百度了一下两者的区别。

这两个函数可?#36828;?#29305;定函数生成的密码?#22336;?#20018;进行解密操作,就可以生成为未解密的?#22336;?#20018;,比较实用,下面来看看这两个函数的用法:

decodeURI()定义和用法:decodeURI() 函数可对 encodeURI() 函数编码过的URI 进行解码。

  • 语法:decodeURI(URIstring)
  • 参数 描述:URIstring 必需。一个?#22336;?#20018;,含有要解码的 URI 或其他要解码的文本。
  • 返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的?#22336;?#26367;换。

decodeURIComponent()定义和用法:decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。

  • 语法:decodeURIComponent(URIstring)
  • 参数 描述:URIstring 必需。一个?#22336;?#20018;,含有编码 URI 组件或其他要解码的文本。
  • 返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的?#22336;?#26367;换。

以上就是两者用法的说明,小伙伴儿说这不是一样的嘛,其实看似一样,但是在?#23548;?#30340;使用过程中有一个问题:两者对于@ 、 /等特殊符号进行进行编码传递参数的时候有一些不一样。

到这里呢,就是我在项目当中解决获取地址栏传递过来的参数乱码问题的方法,希望通过分享可以帮助到一些小伙伴。