2011-06-16 8 views
11

के रूप में प्राप्त करें, मैं इसके आउटपुट को अपरकेस के रूप में चाहता हूं।सर्वर से स्ट्रिंग प्राप्त करें। यूआरएलएनकोड को अपरकेस

http%3a%2f%2f 

लेकिन मैं की जरूरत है::

http%3A%2F%2F 

वहाँ सी # में निर्मित समाधान है यह मैं Server.UrlEncode("http://") पर प्राप्त होता है?


यूआरएल इनकोडिंग डाइजेस्ट (हैश) बनाने के लिए हस्ताक्षर आधार स्ट्रिंग के रूप में काम करेगा (हस्ताक्षर एल्गोरिथ्म के लिए इनपुट)। हैश को फिर अन्य सिस्टम (जावा, पीएचपी, आदि) द्वारा सत्यापित किया जाएगा, इसलिए उन्हें पहले हस्ताक्षर पुनर्निर्माण द्वारा हैश को फिर से बनाने की आवश्यकता है।

+1

करने के लिए सभी हेक्स पत्र अंकों संयोजनों की जगह क्यों अपर केस होना चाहिए? –

+0

क्या मामला सभी% बच निकले वर्णों के लिए मायने रखता है? –

+7

यह ओएथ जैसे कुछ के लिए मायने रखता है जहां '% 2f' और'% 2F' के बीच का अंतर आपके हस्ताक्षर को अमान्य बनाने के लिए पर्याप्त है - http://oauth.net/core/1.0/#encoding_parameters –

उत्तर

23

यह अपरकेस आपकी स्ट्रिंग में सभी भागने वाले पात्र होंगे।

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

यह उसका एजेंट-जे है, लेकिन बिना अतिरिक्त ")", धन्यवाद! – lax

+0

इसके लिए धन्यवाद। किसी कारण से ट्विटर के ओएथ को बच निकले वर्णों को अपरकेस में होना आवश्यक है या अन्यथा यह आपको 401 अनधिकृत – SAGExSDX

+0

धन्यवाद देगा! (बीटीडब्लू, ओएथ के लिए यह जरूरी कारण यह है कि संपूर्ण यूआरएल ("http: //" और सभी) URLEncoded है और फिर हस्ताक्षरित है। OAuth 1.0 spec को एन्कोडेड वर्णों के लिए अपरकेस हेक्साडेसिमल की आवश्यकता है, लेकिन .NET UrlEncode लोअरकेस उत्पन्न करता है - अंतर हस्ताक्षर से मेल नहीं खाता है।) –

0

मानते हैं कि "http" हमेशा पहले चार वर्ण होते हैं तो आप उस भाग को "http", UrlEncode के बाद स्ट्रिंग को विभाजित करते हैं और फिर ToUpper() पर कॉल करते हैं। फिर अपने उपसर्ग के रूप में "http" के साथ मिलकर जुड़ें।

3

यह बहुत आसान है

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

अर्थात अपर केस