我希望它的輸出爲大寫。這是我得到Server.UrlEncode("http://")
:從Server.UrlEncode獲取字符串,大寫
http%3a%2f%2f
,但我需要:
http%3A%2F%2F
有沒有在C#中內置的解決方案?
url編碼將作爲簽名基礎字符串(輸入到簽名算法)來創建摘要(散列)。 哈希將被其他系統(java,php等)驗證,所以他們需要首先通過簽名重構來重新創建哈希。
我希望它的輸出爲大寫。這是我得到Server.UrlEncode("http://")
:從Server.UrlEncode獲取字符串,大寫
http%3a%2f%2f
,但我需要:
http%3A%2F%2F
有沒有在C#中內置的解決方案?
url編碼將作爲簽名基礎字符串(輸入到簽名算法)來創建摘要(散列)。 哈希將被其他系統(java,php等)驗證,所以他們需要首先通過簽名重構來重新創建哈希。
這將大寫字符串中的所有轉義字符。
string url = "http://whatever.com/something";
string lower = Server.UrlEncode(url);
Regex reg = new Regex(@"%[a-f0-9]{2}");
string upper = reg.Replace(lower, m => m.Value.ToUpperInvariant());
假設「http」始終是前四個字符,那麼您只需在「http」之後分割字符串,即UrlEncode
該部分,然後在其上調用ToUpper()
即可。然後再加上「http」作爲前綴。
這是很容易
Regex.Replace(encodedString, @"%[a-f\d]{2}", m => m.Value.ToUpper())
即更換所有十六進制字母數字組合,以大寫
Uri.EscapeDataString("http://")
此代碼返回
http%3A%2F%2F
爲什麼一定要大寫? – 2011-06-16 11:31:33
這個案例對於所有轉義字符都有影響嗎? – 2011-06-16 11:34:17
對於類似於OAuth的情況,'%2f'和'%2F'之間的差異足以使您的簽名無效 - http://oauth.net/core/1.0/#encoding_parameters – 2013-07-06 00:00:32