問題描述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")
%>
輸出的結果則是:學而時習之