看到很多朋友包括小编的同事都喜欢在url传中文参数,也许当时自己在测试时,传中文参数并没有报错,但我们是不推荐直接传不经过url编码的中文参数的,本章,我们来看看关于url编码相关的知识。
在url不强制说不能包含中文,但我们应该尽量使url串中只包含ascII字符。所以养成将url编码后再发送到服务器,是个好习惯。
Asp.Net是利用Server下的UrlEncode方法与UrlDncode方法来对Url进行编解码的。
Server.UrlEncode(string s)--对s进行Url编码:
Server.UrlDncode(string s)--对s进行Url解码:
UrlEncode会将空格编码为+,不会对~Z、a~z、0~9、-、_、.、!、*、\、(、)这些字符编码,因为这些字符是被认为是安全的字符,其它的字符就会被编码成为%开头的十六制的字符。
比如,我们对"您好"两个字进行编码:
示例:
protected override void OnInit(EventArgs e)
{
Response.Write(Server.UrlEncode("您好"));
}
输出:%e6%82%a8%e5%a5%bd
我们再将上面编码后的字符解码:
示例:
protected override void OnInit(EventArgs e)
{
Response.Write(Server.UrlDecode("%e6%82%a8%e5%a5%bd"));
}
输出:您好
有的时候,我们在网上下载文件,在网站上看到的文件名是正常的,但在保存提示框中显示的文件名却是乱码,这就是没有对文件名进行编码的原因。
注意:1,不要对整个Url地址进行编码:例如:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect(Server.UrlEncode("http://www.lmwlove.com"));
}
这样,浏览器就认不到你的Url地址了,因为url上面的url地址已经被编码成http%3a%2f%2fwww.lmwlove.com了。
2,#字符是不会被编码的,因为#在url代表的是锚点,有特殊意义,它会截断Url中自身右边的字符,#字符右边的字符是不会发送到服务器端,右边的字符主要用来让浏览器定义到网页中定义好的锚点位置。所以,除了锚点功能外,我们不要在url将#做为参数传递。d