2011-06-16 15 views
11

Çıktısını büyük harf istiyorum.Büyük harf olarak Server.UrlEncode dizesi alın

http%3a%2f%2f 

ama gerekir:: C# yerleşik çözüm

http%3A%2F%2F 

var mı bu ben Server.UrlEncode("http://") olsun nedir?


özetini (hash) oluşturmak için imza taban dize olarak (imza algoritmasına girdi) hizmet edecektir kodlanmış url. Karma, daha sonra diğer sistem tarafından doğrulanacaktır (java, php, vb.), Bu nedenle ilk önce imzayı yeniden oluşturma ile hash yeniden yaratmaları gerekir.

+1

tüm altıgen mektup haneli kombinasyonları yerine? –

+0

% kaçan karakterlerin tümü için durum mu? –

+7

Bu, "% 2f" ile "% 2F" arasındaki farkın, imzanızın geçersiz hale getirilmesi için yeterli olduğu OAuth gibi bir şey için önemlidir - http://oauth.net/core/1.0/#encoding_parameters –

cevap

23

Bu, dizideki tüm çıkış karakterlerini büyük harfle olacaktır.

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()); 
+0

, ekstra ")" olmadan, teşekkürler! – lax

+0

Bunun için teşekkürler. Bazı nedenlerden ötürü Twitter'ın OAuth'ı kaçan karakterlerin büyük harfle olmasını ister, aksi halde size 401 yetkisiz bir şekilde izin verir – SAGExSDX

+0

Teşekkürler! (BTW, OAuth için gerekenin nedeni, tüm URL'nin ("http: //" ve tümü) URLEncoded ve sonra imzalanmasıdır. OAuth 1.0, kodlanmış karakterler için büyük harf hexadicemal gerektirir, ancak .net UrlEncode küçük harf üretir - fark, imzaların eşleşmemesine neden olur.) –

0

"http" ifadesinin her zaman ilk dört karakter olduğunu varsayalım sonra dizeyi "http", UrlEncode o bölümden sonra bölebilirsiniz ve ardından ToUpper() numaralı telefonu arayın. Sonra önekinizle birlikte "http" ile tekrar bir araya gelin.

3

Bu çok kolay

 
Regex.Replace(encodedString, @"%[a-f\d]{2}", m => m.Value.ToUpper()) 

yani Neden büyük harf olmalıdır harf

1
Uri.EscapeDataString("http://") 

Bu kod dönüş

http%3A%2F%2F 
İlgili konular