Javascript 获取链接(url)参数的方法

有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值。本文给出的就是这个流程的具体实现方法。

当然,我们也可以用正则直接匹配,文章中也给出了一个正则的例子。

点此浏览示例文件

分解链接的方式:

 
<script type="text/javascript">
<!--
// 说明:Javascript 获取链接(url)参数的方法
// 整理:http://www.CodeBit.cn

function getQueryString(name)
{
	// 如果链接没有参数,或者链接中不存在我们要获取的参数,直接返回空
	if(location.href.indexOf("?")==-1 || location.href.indexOf(name+'=')==-1)
	{
		return '';
	}

	// 获取链接中参数部分
	var queryString = location.href.substring(location.href.indexOf("?")+1);

	// 分离参数对 ?key=value&key2=value2
	var parameters = queryString.split("&");

	var pos, paraName, paraValue;
	for(var i=0; i<parameters.length; i++)
	{
		// 获取等号位置
		pos = parameters[i].indexOf('=');
		if(pos == -1) { continue; }

		// 获取name 和 value
		paraName = parameters[i].substring(0, pos);
		paraValue = parameters[i].substring(pos + 1);

		// 如果查询的name等于当前name,就返回当前值,同时,将链接中的+号还原成空格
		if(paraName == name)
		{
			return unescape(paraValue.replace(/+/g, " "));
		}
	}
	return '';
};

//http://localhost/test.html?aa=bb&test=cc+dd&ee=ff
alert(getQueryString('test'));
//-->
</script>

用正则匹配的方式:

 
<script type="text/javascript">
<!--
function getQueryStringRegExp(name)
{
	var reg = new RegExp("(^|\?|&)"+ name +"=([^&]*)(\s|&|$)", "i");  
	if (reg.test(location.href)) return unescape(RegExp.$2.replace(/+/g, " ")); return "";
};

//http://localhost/test.html?aa=bb&test=cc+dd&ee=ff
alert(getQueryStringRegExp('test'));
//-->
</script>

检查 url 链接是否已经有参数,添加 ? 或 &

有时候我们需要检查 URL 链接是否已经有参数,然后根据需要判断是添加 ? 还是添加 & 在结尾,这只是一个很小的技巧,但是在做分页或者页面跳转时还是有些用处的。

比如分页,因为有些链接已经有参数了,在附加分页信息的时候不能把原有的参数丢掉,所以判断一下链接是否有参数,然后根据需要附加分页信息。

方法很简单:

 
((strpos($url, '?') !== false) ? '&' : '?');

检查链接中是否含有 ? ,如果有,如:
http://www.test.com/index.php?id=id
则直接在链接后面添加一个 & 然后跟上分页信息:
http://YITU.org/index.php?id=id&page=12

如果链接中没有参数,如:
http://www.test.com/index.php
则需要添加 & 然后跟上分页信息:
http://YITU.org/index.php?page=12

以上代码只是一个示例,具体实现方法需要您自己编写。

附上一个更为健全的检查方法:

 
<?php
$old_url = $_SERVER["REQUEST_URI"];
 
//检查链接中是否存在 ?
$check = strpos($old_url, '?');
 
//如果存在 ?
if($check !== false)
{
	//如果 ? 后面没有参数,如 http://YITU.org/index.php?
	if(substr($old_url, $check+1) == '')
	{
		//可以直接加上附加参数
		$new_url = $old_url;
	}
	else	//如果有参数,如:http://YITU.org/index.php?ID=12
	{
		$new_url = $old_url.'&';
	}
}
else	//如果不存在 ?
{
	$new_url = $old_url.'?';
}
 
echo $new_url;
?>