博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用js控制链接转移(P.S. 自动编码)

Posted on 2010-05-19 10:16  Hi福气鱼  阅读(280)  评论(0)    收藏  举报

我们知道如果在链接中填入中文参数,那么当编码不一致时会出现乱码(比如链接所在的网页是gb2312,而链接链向的网页编码是utf8)因此我们应该对中文数据进行编码,这里写了一个函数,专门来处理链接中的中文...

function addLink(self , url , json){
	url += "?";        //网址后首先是?
	
	var flag = true;  //标志是第一个参数吗。如果是则不用添加&
	
	for(var j in json){ //遍历json找到需要传递的参数
		if(flag){
			url += j+"="+escape(json[j]);
			flag = false;
		}
		else
			url += "&"+j+"="+escape(json[j]);
	}

	self.href = url;  //转移到指定网址
}

 

之后我们可以在链接中这样调用函数

 

<a onclick="addLink(this , 'a.php' , {'name':'han' , 'zh':'韩'});">链接的文字</a>

另外php接收被js escape之后的中文时必须反解码,这里找到了一个函数用来解码escape后的字符串
function php_js_unescape($url)
{
	preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);

	foreach ($a[1] as $uniord)
	{
	$dec = hexdec($uniord);
	$utf = '';

	if ($dec < 128)
	{
	$utf = chr($dec);
	}
	else if ($dec < 2048)
	{
	$utf = chr(192 + (($dec - ($dec % 64)) / 64));
	$utf .= chr(128 + ($dec % 64));
	}
	else
	{
	$utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
	$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
	$utf .= chr(128 + ($dec % 64));
	}

	$url = str_replace('%u'.$uniord, $utf, $url);
	}

	return urldecode($url);
}