问题描述1:

strUrl = "../Message/MessageNotice.aspx?Bm=公司领导&Ks=公司领导&Url=/gczjbs /XMBsuopei.aspx?kkk=1&ddd=2&Name=王华"    其中我想传的Url值是/gczjbs/XMBsuopei.aspx?kkk=1&ddd=2这一部分,   
但是按我这么些的话Url值只是/gczjbs/XMBsuopei.aspx?kkk=1部分,后面的ddd=2都没有传递到网页中。

解决办法:用url编码处理下

&url=" + Server.UrlEncode("/gczjbs/XMBsuopei.aspx?kkk=1&ddd=2")

问题描述2:

用 ajax从前台显示页面传字符串变量给处理页面,出现了件怪事,我想传的内容是abc+,但接收以后用System.out.println()输出是 abc空格。反复测试好几遍,都是这个结果,真是令人郁闷。如果传送一个参数“2423+35345+456” 接收后还是“2423 35345 456”加号丢失了。在网上搜了搜,找到了原因。原因:   url中有些字符被转义,比如空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格。如何解决呢?如果是通过url传递参数,应该对其进行必要 的编码。

解决办法:
在javascript中加入   function URLencode(sStr)
{
    return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
}
对字符串进行处理.如:var str=URLencode("abc+")

对Query字段进行Encode操作

利用一个Query字段在不同主页间传递信息时必须进行Encode操作,因为如果不这样做,你很可能使得接受信息的那边接受到一些你所不期望的奇怪字串。

注意

其实如果Query字段中没有一些特殊字符,例如空格和标点符号等,那么也可以不进行Encode操作,例如上个小节的例子就是。

其实,这种Encode操作是十分容易的,有一个特定的方法来执行这种操作:那就是Server.URLEncode()方法,看下面这个例子:

<a href=“response.asp?Message=<%=Server.URLEncode(“This Query String has been URL encoded.”)%>“>点击这里</a>

请注意不要对Query字段的名称以及等号进行Encode操作,你只需要将其值进行Encode操作就可以了。

进行了encode操作后,Query字段如下:

Message=This+Query+String+has+been+URL+encoded%2E

你并不需要考虑对上面的字串再进行解码,Active Server Page会自动进行这样的处理。例如,假设response.asp中有这样的脚本:

<%=Request.QueryString(“message”)%>

这时,显示结果为:

This Query String has been URL encoded.



关于Server.UrlEncode

ASP.net中的Server.UrlEncode函数和ASP中的Server.URLEncode函数返回的值不一样。

试验代码:
ASP.net 中:Response.Write(Server.UrlEncode("汇编"));返回:%e6%b1%87%e7%bc%96
ASP       中:Response.Write Server.URLEncode("汇编") 返回:%BB%E3%B1%E0

产生这个问题的原因:
     ASP.net 中的 Server.UrlEncode 默认是按照 UTF-8 编码方式进行处理的
     ASP中是按照本地设置编码方式进行处理的。

如果你在 ASP.net 下采用如下的编码: ASP 和 ASP.net 的结果就会一样:
     Response.Write(HttpUtility.UrlEncode("汇编",Encoding.Default));

ASP中的Server.URLEncode参数转换以及逆转函数

UrlEncode
将字符串以 URL 编码。
返回值: 字符串
函数种类: 编码处理

内容说明
本函数将字符串以 URL 编码。例如空格就会变成加号。

ASP中的用法:
Server.URLEncode("内容")


例如:
<%
Response.Write Server.UrlEncode("学而时习之")
%>
输出的结果是:%D1%A7%B6%F8%CA%B1%CF%B0%D6%AE

程序中接受参数的时候,还需要转换成原来的样子,则需要URLDecode函数,如下:
Function URLDecode(enStr)
     dim deStr,strSpecial
     dim c,i,v
     deStr=""
     strSpecial="!""#$%&'()*+,.-_/:;<=>?@[\]^`{|}~%"
     for i=1 to len(enStr)
         c=Mid(enStr,i,1)
         if c="%" then
             v=eval("&h"+Mid(enStr,i+1,2))
             if inStr(strSpecial,chr(v))>0 then
                 deStr=deStr&chr(v)
                 i=i+2
             else
                 v=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2))
                 deStr=deStr & chr(v)
                 i=i+5
             end if
         else
             if c="+" then
                 deStr=deStr&" "
             else
                 deStr=deStr&c
             end if
         end if
     next
     URLDecode=deStr
End function

例如:
<%
Response.Write URLDecode("%D1%A7%B6%F8%CA%B1%CF%B0%D6%AE")
%>
输出的结果则是:学而时习之