首先,地址栏传中文是很不明智的,因为不同的浏览器对与中文的解析存在不同的方法。所以,建议如果能不用尽量不要用。
当然,很多时候奇葩需求要求我们必须解决这个办法。
下面,是解决个别奇葩需求的方法。
在中文参数加入到地址栏之前进行转码。(注意,简单转码是不可以的,浏览器会根据编码方式对已经编码的部分进行一次反编译。)
正确方法是:
在中文加入到地址栏前,进行两次encodeURI转码
在传输过程中浏览器会解析一遍,到达指定页面获取地址栏参数的时候,再进行一次decodeURI解码就可以了。
列子:
A页面传参
- <script type="text/javascript">
- //通过地址栏传参的方式设置第二个页面b.html的标题为:中文
- var title = "中文";
- var t = encodeURI(encodeURI(title));
- src = "b.html?title="+t;
- </script>
B页面接受参数
- <script type="text/javascript">
- var t = getParam("title"); //获取url参数
- var title = decodeURI(t); //只需要转一次码
- //输出title ="中文"
- </script>
//截取url参数方法。例:(book_id=8, paramName=book_id ,return 8)
function getParam(paramName){
paramValue = "", isFound = !1;
if (this.location.search.indexOf("?") == 0 && this.location.search.indexOf("=") > 1)
{
arrSource = unescape(this.location.search).substring(1,
this.location.search.length).split("&"), i = 0;
while (i < arrSource.length && !isFound) arrSource[i].indexOf("=") > 0 &&
arrSource[i].split("=")[0].toLowerCase() == paramName.toLowerCase() && (paramValue = arrSource[i].split("=")[1], isFound = !0), i++
}
return paramValue == "" && (paramValue = null), paramValue
}