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