2009-03-05 194 views
2

我對編碼UTF-8編碼文本字符串的一串麻煩網址進行編碼以通過HTTP傳遞。我使用經典ASP(vbscript)中的Server.URlEncode在「é」字符上進行編碼。ASP經典中的UTF-8 Server.UrlEncode問題

它產生下面的字符串,

%C3%83%C2%A9

我通過HTTP交談,該系統是PHP但是,它無法解碼此字符串。在http://www.albionresearch.com/misc/urlencode.php使用PHP編碼使用PHP URL編碼方法編碼相同的字符出來的,

%E9

有誰知道我怎麼能成功編碼我的UTF-8編碼字符串在我的ASP,使得PHP系統可以成功解碼它們嗎?

回答

4

%C3%83%C2%A9

這是編碼太多:字符串被寫爲UTF-8,作爲ISO-8859-1,然後寫成讀回UTF-8再次進行十六進制編碼!

%E9

這是編碼太少:串寫出爲平原ISO-8859-1和十六進制編碼。如果您正在與之交談的PHP腳本需要ISO-8859-1,但是現代Web系統應該使用UTF-8,那麼這很正常,在這種情況下,您希望它的順序如下所示:

%C3 %A9

(這是編碼的恰到好處!)

我使用Server.URLEncode在傳統的ASP

經典ASP有,unfort統一處理Unicode的一些嚴重缺陷。您可以將@ CODEPAGE = 65001(和Response.Charset =「UTF-8」)設置爲生成UTF-8頁面,但是您的內部字符串類型仍然編碼在系統代碼頁中,並且從表單提交或數據庫中獲取的任何數據將會被讀入該編碼。

所以,你可以URLEncode()一個文字字符233來獲得正確的輸出OK,但是如果你從表單提交中獲得UTF-8編碼的'é'的數據,你最終會'Ã'' - UTF-8序列被誤解爲ISO-8859-1(實際上是cp1252,與Windows相同)。

+0

+1優秀的答案。 – Tomalak 2011-06-28 15:55:10

0

這是我的工作。

創建一個新的ASP文件在JScript中編碼(不在VBScript中),調用它urlEncodeUTF8。ASP:

<%@ Language="JScript" %> 
<% 
    Response.CharSet="UTF-8" 
    Response.Write(encodeURIComponent(Request("s"))) 
%> 

在你的主ASP文件編寫代碼:

FUNCTION URLEncodeUTF8(ByVal str) 
    URLEncodeUTF8 = "" 
    On Error Resume NEXT 
    Err.Clear 
    postStr = "s=" & Server.URLEncode(str) 
    sURL = "http://" & Request.ServerVariables("SERVER_NAME") & "/urlEncodeUTF8.asp" 
    SET xmlHTTPObj = CreateObject("MSXML2.ServerXMLHTTP") 
    WITH xmlHTTPObj 
     .SetTimeouts 2000, 2000, 2000, 5000 
     .Open "POST", sURL, false 
     .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8" 
     .SetRequestHeader "Content-Length", Len(postStr) 
     .Send postStr 
     xmlHttpResponse = .responseText 
     IF Err.number=0 AND .Status=200 THEN 
      URLEncodeUTF8 = xmlHttpResponse 
     END IF 
    END WITH  
    SET xmlHTTPObj = NOTHING 
    On Error Goto 0 
END FUNCTION 

現在你可以用urlencode使用上述功能,您的字符串:

Response.Write(URLEncodeUTF8("é")) 

在這種情況下,結果將是:

%C3%A9 
2

什麼ab出這個?

Function URLEncodeWithCodepage(value, myCodepage) 
    Dim cpOriginal 
    cpOriginal = Response.Codepage 
    Response.Codepage = myCodepage 
    URLEncodeWithCodepage = Server.URLEncode(value) 
    Response.Codepage = cpOriginal 
End Function 

您可以使用它與

encodedValue = URLEncodeWithCodepage(value, 65001) 

得到它UTF-8編碼

+0

** Session.CodePage **和** Response.CodePage **之間是否有區別? – cuixiping 2014-08-01 16:15:26

1

添加以下的ASP頁面,返回數據的頭

Response.ContentType = "text/html" 
Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8" 
+0

爲我解決了。 – 2012-09-13 19:31:29