您的位置:首页 > 其它

.NET中url参数的编码和转码…【Server.UrlDecode(""),Server.UrlDecode("")】

2010-06-09 12:17 204 查看

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>

当<%#Eval("Name") %>的值为: Hello”world 的时候 , 查看源文件: <a href="default.aspx?Name=Hello%22world&id=68">Test</a>
当<%#Eval("Name") %>的值为: Hello&world 的时候 , 查看源文件: <a href="default.aspx?Name=Hello%26world&id=69">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("")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐