前陣子,在做護校的案子,因為要跟他們學校的SSO整合
跟他們資訊人員討論後,決定採用登入他們portal後透過url轉址並傳遞參數給我
結果他們的資訊人員忘了對參數編碼,結果雙方系統一直界接不起來
我們業務跟對方行政人員搞到都快瘋了
以這邊說明一下何謂編碼
為什麼要編碼?
為了讓資料能夠在網路上正確傳遞,我們通常會把 Binary 格式的資料先轉成 Text 格式再傳遞資料,而這種轉換的過程就是「編碼(Encode)」,反之就是「解碼(Decode)」。除此之外,我們也會將某些 "文字" 進行編碼,讓原本非 ASCII 的文字能夠以 ASCII 的字元傳遞,這樣做是為了避免文字在網路傳遞的時候會失真,而這種讓非 ASCII 的文字轉換成以 ASCII 的字元的表達方式也通稱做「編碼(Encode)」。
在ASP.NET 中的 Server.UrlEncode 採用UTF-8編碼方式進行處理。
而ASP中是按照本地設置編碼方式進行處理。
假設ASP.NET與ASP間傳值溝通,而ASP(預設編碼為big5),則要採用:
smbody="這是一個測試"
在ASP.NET--- HttpUtility.UrlEncode(smbody, Encoding.Default)
Response.Write 輸出: %b3o%acO%a4%40%ad%d3%b4%fa%b8%d5
在ASP --- Server.UrlEncode(smbody)
Response.Write 輸出: %B3o%ACO%A4%40%AD%D3%B4%FA%B8%D5
若ASP(預設編碼為UTF-8),則要採用:
在ASP.NET---HttpUtility.UrlEncode(smbody, Encoding.UTF8) OR Server.UrlEncode(smbody)
Response.Write 輸出: %e9%80%99%e6%98%af%e4%b8%80%e5%80%8b%e6%b8%ac%e8%a9%a6
在ASP --- Server.UrlEncode(smbody)
Response.Write 輸出: %E9%80%99%E6%98%AF%E4%B8%80%E5%80%8B%E6%B8%AC%E8%A9%A6
字串還原 使用
Server.UrlDecode函數(ASP & ASP.NET)
HttpUtility.UrlDecode函數 (ASP.NET)
留言列表