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

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 后面跟 双引号吧!  如果你不喜欢这样的话,还可以把 单引号替换为 &#39;

    然后 Response.Write(Server.UrlDecode("&#39;"))  = '  [单引号]

     

    总结:

    URL传参数尽量不要传字符串! 传Id,Guid等一些较好!

    如果要传字符串,请确保 一定记得使用Server.UrlDecode()给参数编码! 始终不要信任用户的输入!

    如果你用.net 3.5 , 请把href后面的单引号改为双引号! <a href=”” /> 因为Server.UrlDecod()不编码单引号!

    Technorati 标签:

     

  • 你可能感兴趣的:(server)