2011-06-16 14 views
11

Quiero su salida en mayúscula. Esto es lo que me pasa en Server.UrlEncode("http://"):Obtener una cadena de Server.UrlEncode como mayúscula

http%3a%2f%2f 

pero necesito:

http%3A%2F%2F 

¿Hay solución integrada en C#?


La url codificada servirá como base de la cadena de firma (entrada al algoritmo de firma) para crear digerir (hash). El hash luego será verificado por otro sistema (java, php, etc.), por lo que primero deben recrear el hash mediante reconstrucción de firma.

+1

Por qué tiene que estar en mayúsculas? –

+0

¿Importa el caso para todos los%% de caracteres escapados? –

+7

Esto es importante para algo como OAuth, donde la diferencia entre '% 2f' y'% 2F' es suficiente para que su firma no sea válida - http://oauth.net/core/1.0/#encoding_parameters –

Respuesta

23

Esto mayúscula todos los caracteres escapó en su cadena.

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

ese es su agente-j, pero sin extra ")", ¡Gracias! – lax

+0

gracias por esto. Por alguna razón, OAuth de Twitter requiere que los personajes escapados estén en mayúsculas o bien te dará 401 no autorizados – SAGExSDX

+0

¡Gracias! (Por cierto, la razón por la cual esto es necesario para OAuth es que toda la URL ("http: //" y todo) está URLEncoded y luego se firma. La especificación OAuth 1.0 requiere mayúscula hexadicemal para caracteres codificados, pero .net UrlEncode produce minúsculas - la diferencia hace que las firmas no coincidan). –

0

Suponiendo que "http" es siempre los primeros cuatro caracteres, simplemente divida la cadena después de "http", UrlEncode esa parte y luego llame al ToUpper() en ella. Luego únete nuevamente con "http" como tu prefijo.

3

Esto es muy fácil

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

es decir, reemplazar todas las combinaciones de letras y dígitos hexadecimales en mayúsculas

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

Este código de retorno

http%3A%2F%2F 
Cuestiones relacionadas