URL编码和转码函数:
URL编码:Server.UrlEncode(Request.QueryString["param2"]);
HttpUtility.UrlEncodeUnicode();URL解码:Server.UrlDecode(Request.QueryString["param1"]);
HTML编码:Server.HtmlEncode("")HTML解码:Server.HtmlDecode("")
注: 在.net 3.5中Server.UrlEncode不会编码 单引号,在最新的.net 4.0 则会编码单引号!
这里的URL编码一般指的 URL参数编码,那么为什么要给参数编码呢?
<a href="default.aspx?Name=<%#Eval("Name") %>&id=<%#Eval("id") %>">Test</a> 也许我们都写过这样的代码吧[至少我这样写:-)]
<%#Eval("Name") %>是绑定的数据! 我们也无法预知他会是什么内容!
- 当<%#Eval("Name") %>的值为: Hello”world 的时候 , 查看源文件: <a href="default.aspx?Name=Hello"world&id=68">Test</a> name=Hello, id 参数就丢失了!
- 当<%#Eval("Name") %>的值为: Hello&world 的时候 , 查看源文件: <a href="default.aspx?Name=Hello&world&id=68">Test</a> &本来就是分割参数的!
如何才能让上面的参数正确呢?[试试下面的]
<a href="default.aspx?Name=<%#Server.UrlEncode(Eval("Name").ToString()) %>&id=<%#Eval("id") %>">Test</a>
现在你在用 Response.Write(Server.UrlDecode(Request.QueryString["Name"])); 就可以了! 我发现好像后台不解码也可以!
如果 <a href='default.aspx?Name=<%#Eval("Name") %>&id=<%#Eval("id") %>'>Test</a> 注意现在外面用的 单引号了!
- 当<%#Eval("Name") %>的值为: Hello'world 的时候 , 查看源文件: <a href='default.aspx?Name=Hello'world&id=68'>Test</a> name=Hello, id 参数就丢失了! 单引号把后面的截断了!
- 当使用Server.UrlEncode使用<a href='default.aspx?Name=<%#Server.UrlEncode(Eval("Name").ToString()) %>&id=<%#Eval("id") %>'>Test</a> 后 发现还是不行!
这是由于:在.net 3.5中Server.UrlEncode不会编码 单引号,在最新的.net 4.0 这个问题已解决! 我去msdn论坛求助的原帖:http://social.microsoft.com/Forums/zh-CN/partnercndevaspnet/thread/de970176-b64a-4d30-a8d9-7b497577a482
遇到这个问题还是建议把 href 后面跟 双引号吧! 如果你不喜欢这样的话,还可以把 单引号替换为 '
然后 Response.Write(Server.UrlDecode("'")) = ' [单引号]
总结:
URL传参数尽量不要传字符串! 传Id,Guid等一些较好!
如果要传字符串,请确保 一定记得使用Server.UrlDecode()给参数编码! 始终不要信任用户的输入!
如果你用.net 3.5 , 请把href后面的单引号改为双引号! <a href=”” /> 因为Server.UrlDecod()不编码单引号!
Technorati 标签: Server.UrlDecode("")
记录学习点滴...,坚持每天让自己的技能增加1%,默默的坚持下去吧!:-)