2011-03-22 16 views
10

Estoy buscando las funciones de escape y desaparición de URL en MonoTouch. Esencialmente Busco el equivalente MonoTouch del método stringByReplacingPercentEscapesUsingEncoding, como en la línea de seguimiento de código de Objective-C:Funciones de escape/unescape de Url en MonoTouch

NSString *args = [(NSString*)[components objectAtIndex:3] 
        stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

que estaba esperando a ser capaces de traducir esto a algo como esto:

string args = URL.Unescape(components[3]); 

¿Existen funciones de escape/unescape de URL en MonoTouch o tengo que rodar las mías?

Respuesta

19
System.Web.HttpUtility.UrlDecode (string s); 

Que se encuentra en System.Web.Services.dll en monotouch.

+0

¿Has probado eso? No aparece en mi MonoDevelop. – jonathanpeppers

+0

No veo el espacio de nombres _HttpUtility_ en _System.Net_ en MonoDevelop. – BruceHill

+0

Ver mi respuesta editada. – jonathanpeppers

1

No está presente en la versión de .Net Framework incluida con MonoTouch.

Creo que obtuve la fuente para ello de Google Code here.

Es posible que desee buscar la licencia para esto, la usé para una aplicación personal de iPhone.

+1

Gracias, Jonathan. Eso es genial Del mensaje en la parte superior del código parece que este código es de código abierto. Esto es justo lo que necesitaba. Gracias de nuevo. – BruceHill

+3

Lo más seguro es que esté en monotouch, lo sé porque lo puse allí, pero olvidé que tenemos uno interno en System.dll, el público está en System.Web.Services. –

+0

Me alegro de que esté ahí, aprendí algo hoy seguro. – jonathanpeppers

1

Además de la respuesta, Split tiene el parámetro Params Split ('&', '='); expresión primero dividida por & then '=' por lo que los elementos impares son todos los valores codificados que se muestran a continuación.

public static void EncodedQueryString(ref string queryString) 
    { 
     var array=queryString.Split('&','='); 
     for (int i = 0; i < array.Length; i++) { 
      string part=array[i]; 
      if(i%2==1) 
      {    
       part=System.Web.HttpUtility.UrlEncode(array[i]); 
       queryString=queryString.Replace(array[i],part); 
      } 
     } 
    } 

Debe codificar solo los valores en general.