2010-03-23 13 views
8

qué es una alternativa para la función de escape de JavaScript en C# por ejemplo, suponga una cadena: "Hola Foster me falta/usted" dará "Hola% 20Foster% 27s% 20i% 27m% 20missing% 20/usted "si usamos la función de escape de JavaScript, pero ¿cuál es la alternativa para C#. Lo he buscado pero no uso.alternativa de C# para la función de escape de JavaScript

+0

¿Qué estás tratando de hacer? –

+0

chicos, he probado followin 'pero ninguno reemplaza la comilla simple' '' '. Uri.EscapeDataString ("texto") Uri.EscapeUriString ("texto") System.Web.HttpUtility.UrlEncode ("texto") System.Web.HttpUtility.UrlPathEncode ("algún thext") – FosterZ

Respuesta

0
string myString = "Hello my friend"; 
myString = myString.Replace(" ", "%20"); 

Esto reemplazaría todo "" con "% 20".

¿Esto es lo que quería?

+3

HttpUtility.UrlEncode() hace eso por usted – Emmanuel

6

La mejor solución que he visto se menciona en este blog - C#: Equivalent of JavaScript escape function por Kaushik Chakraborti. Hay más para escapar de javascript que simplemente codificar url o reemplazar espacios con entidades.

+0

+1 Sí, la función 'escape' es una bestia única y URLEncode simplemente no se comporta igual. –

+0

@Dan Diplo: thnx amigo, pero ya lo vi, no uso – FosterZ

+0

En la respuesta que publiqué, incluí el código del Reflector para esta función –

4

A continuación se presenta la implementación escape función que se encuentra en Microsoft.JScript.dll ...

[NotRecommended("escape"), JSFunction(JSFunctionAttributeEnum.None, JSBuiltin.Global_escape)] 
public static string escape(string str) 
{ 
    string str2 = "ABCDEF"; 
    int length = str.Length; 
    StringBuilder builder = new StringBuilder(length * 2); 
    int num3 = -1; 
    while (++num3 < length) 
    { 
     char ch = str[num3]; 
     int num2 = ch; 
     if ((((0x41 > num2) || (num2 > 90)) && 
      ((0x61 > num2) || (num2 > 0x7a))) && 
      ((0x30 > num2) || (num2 > 0x39))) 
     { 
      switch (ch) 
      { 
       case '@': 
       case '*': 
       case '_': 
       case '+': 
       case '-': 
       case '.': 
       case '/': 
        goto Label_0125; 
      } 
      builder.Append('%'); 
      if (num2 < 0x100) 
      { 
       builder.Append(str2[num2/0x10]); 
       ch = str2[num2 % 0x10]; 
      } 
      else 
      { 
       builder.Append('u'); 
       builder.Append(str2[(num2 >> 12) % 0x10]); 
       builder.Append(str2[(num2 >> 8) % 0x10]); 
       builder.Append(str2[(num2 >> 4) % 0x10]); 
       ch = str2[num2 % 0x10]; 
      } 
     } 
    Label_0125: 
     builder.Append(ch); 
    } 
    return builder.ToString(); 
} 

Código tomado de reflector.

6
var unescapedString = Microsoft.JScript.GlobalObject.unescape(yourEscapedString); 

var escapedString = Microsoft.JScript.GlobalObject.escape(yourUnescapedString); 
1

La mejor solución que he visto que se menciona en este blog - C#: Equivalente de la función de escape JavaScript Kaushik Chakraborti. Hay más para escapar de javascript que simplemente codificar url o reemplazar espacios con entidades.

Noté otra solución en los comentarios del artículo de KodeSharp que puede ser mejor. El comentario dice que es más compatible con UTF-8 y no requiere la referencia a JScript. ¿Es esto mejor?

(Dependiendo de System.Web.Extensions.dll)

using System.Web.Script.Serialization; 
JavaScriptSerializer serialiser = new JavaScriptSerializer(); 
serialiser.Serialize("some \"string\"") 
+0

Intenté esta solución, pero Javascript unescape no la "deserializó". Tendría que tirarlo a Refelector para ver lo que realmente hace. – evodev

21

Se puede utilizar:

string encoded = HttpUtility.JavaScriptStringEncode(str); 

Nota: Necesita al menos ASP.NET 4.0 para ejecutar el código anterior .

Cuestiones relacionadas