JS获取Http地址栏参数(参数中文乱码的问题,以及空格的问题)

获取Http地址栏后的参数,参数包含已编码的中文

方法1:

<script>
function getRequest() {   
   var url = window.location.search; //获取url中"?"符后的字串   
   var theRequest = new Object();   
   if (url.indexOf("?") != -1) {   
	  var str = url.substr(1);   
	  strs = str.split("&");   
	  for(var i = 0; i < strs.length; i ++) {   
		  //就是这句的问题
		 theRequest[strs[i].split("=")[0]]=decodeURI(strs[i].split("=")[1]); 
		 //之前用了unescape()
		 //才会出现乱码  
	  }   
   }   
   return theRequest;   
}
var arr = getRequest();
var searchtxt = arr['searchtxt'];//参数名
</script>

方法2

var name="";
//获取路径中传参值
function getRequestParam(param) {
    var requestString = location.search;
    var reg = new RegExp("(?:\\?|&)" + param + "=(.*?)(?:&|$)");
    if (reg.test(requestString)) {
        return decodeURIComponent(RegExp.$1);
    } else {
        return '';
    }
}
name=getRequestParam('name');

备注

做网页开发一般都会用到Encode编码。在C#里,HttpUtility.UrlEncode()转换出来的编码,到了客户端用JS的decode方法转换后,发现总有个"+"号,原来字符串是没有“+”号的。

经分析后,发现问题原因在于,微软的HttpUtility.UrlEncode方法把空格转成"+“了( 如果原来是 “+” 则被转换成 “%2b” ) ,为了符合JS编码格式,把”+"替换成 "%20"即可。

如:

服务端:
message= HttpUtility.UrlEncode(message).Replace("+", “%20”);

客户端:

decodeURIComponent(message);

你可能感兴趣的:(C#)