問題描述 我們在對接第三方系統的時候通常需要get或post來傳輸數據,但此時如果參數中存在&% #*!包括空格等特殊符號的時候就無法正常請求具體表現在參數獲取不正確或者獲取不到參數,甚至有時候會直接截斷發送的請求。 解決方法 特殊字元在url中不能正常傳輸我們首先肯定是考慮對其進行URL編碼,不同 ...
問題描述
我們在對接第三方系統的時候通常需要get或post來傳輸數據,但此時如果參數中存在&% #*!包括空格等特殊符號的時候就無法正常請求具體表現在參數獲取不正確或者獲取不到參數,甚至有時候會直接截斷發送的請求。
解決方法
特殊字元在url中不能正常傳輸我們首先肯定是考慮對其進行URL編碼,不同語言url編碼封裝的方法可能有所不同,因為我這裡是使用c# 後臺跟第三方系統對接 ,所以直接考慮c# 類庫封裝的方法了
c#中有三種url編碼的方式分別是
1 HttpUtility.UrlEncode
2 Server.UrlEncode
3 Uri.EscapeUriString
這裡就不詳細對比它們的優缺點了 ,因為這裡我目的在於問題的解決和記錄,所以只描述一下過程中遇到的問題和該註意的地方,
1 首先HttpUtility.UrlEncode 對空格的處理是使其變成+ 的符號比如你有一個這樣的字元串 : "下單時間:2017/3/28 23:05:51" 註意其中有一個空格對應生成的字元串是:"%e4%b8%8b%e5%8d%95%e6%97%b6%e9%97%b4%3a2017%2f3%2f28+23%3a05%3a51" ,空格變成了+符號,所以傳輸的時候應該做相應的處理,
我這裡的解決方法是把編碼後的字元串中的+符號再替換成對應的編碼格式, 如utf8 空格應該編碼成 %20,所以只要把+符號替換成 %20,
2 第二要註意的就是Uri.EscapeDataString 雖然沒有所有的空格變加號的問題但是被編碼的字元串有長度限制,限制的長度32766個字元 超過則會拋出異常 ,其實用方式如下
以上兩種方式預設編碼都是utf8 編碼當然也可以換成其它格式。
本文永久更細地址:http://siyouku.cn/article/6820.html