木子屋 Dnawo's BLOG

Firefox自动对url中的中文进行编码导致乱码

👤 dnawo 📅 2008-01-16 👁 10141 👍 0 💬 0 🔄 本站原创
先看下面一个例子:

index.htm:
<script language="javascript">
title = "木子屋";
document.write("参数值未编码(http://localhost/003.htm?title=木子屋):<br/>");
document.writeln("<iframe width=\"300\" height=\"300\" src=\"http://localhost/002.htm?title="+title+"\" frameborder=1 marginwidth=0 marginheight=0></iframe>");
document.writeln("</p>");
document.write("参数值编码(http://localhost/003.htm?title=%u6728%u5B50%u5C4B):<br/>");
document.writeln("<iframe width=\"300\" height=\"300\" src=\"http://localhost/003.htm?title="+escape(title)+"\" frameborder=1 marginwidth=0 marginheight=0></iframe>");
</script>

002.htm:
<script language="javascript">
//获取查询字符串中的参数值
function GetParam(parmName)
{
	var url	= document.location.search;
	if(url!="undefined")
	{
		var arrParam	= url.split("&");

		for(var i =0;i<arrParam.length;i++)
		{
			var loc	= arrParam[i].indexOf(parmName+"=");

			if(loc!=-1)
			{
				return arrParam[i].replace(parmName+"=","").replace("?","");
				break;
			}
			
		}
	}
}
document.write("title:" + GetParam("title"));
</script>

003.htm:
<script language="javascript">
//获取查询字符串中的参数值
function GetParam(parmName)
{
	var url	= document.location.search;
	if(url!="undefined")
	{
		var arrParam	= url.split("&");

		for(var i =0;i<arrParam.length;i++)
		{
			var loc	= arrParam[i].indexOf(parmName+"=");

			if(loc!=-1)
			{
				return arrParam[i].replace(parmName+"=","").replace("?","");
				break;
			}
			
		}
	}
}
document.write("title(解码):" + unescape(GetParam("title")));
</script>

分别在IE和Firefox打开http://localhost/index.htm可以得到以下结果

IE:002.htm和003.htm都显示正常;
Firefox:002.htm显示为乱码,003.htm显示正常;


Firefox乱码的原因是由于Firefox对地址中的中文采取了不同于IE的编码方式(网上说法),也就是说:

当url参数值含有中文时必须使用escape进行编码!

测试中还发现,当参数值没有用escape进行编码时,使用unescape进行解码IE下不会乱码,但Firefox下会乱码!

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 使用DNS+IIS在本地创建域名和站点 下一篇 → Dvbbs8.1整合后无法同步登录解决方法