2010-03-23 13 views
8

cosa è un'alternativa per la funzione di escape javascript in C# per esempio supponiamo una stringa: "Ciao Foster mi manca/tu" darai "Ciao% 20Foster% 27s% 20i% 27m% 20missing% 20/you "se usiamo la funzione javascript escape, ma qual è l'alternativa per C#. l'ho cercato ma non serveC# alternativa per javascript escape function

+0

cosa stai cercando di fare? –

+0

ragazzi, ho provato followin 'ma nessuno di loro sostituisce la citazione singola "'". Uri.EscapeDataString ("un po 'di testo") Uri.EscapeUriString ("un po' di testo") System.Web.HttpUtility.UrlEncode ("un po 'di testo") System.Web.HttpUtility.UrlPathEncode ("alcuni thext") – FosterZ

risposta

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

Questo sostituirà tutti "" con "% 20".

E 'questo quello che volevi?

+3

HttpUtility.UrlEncode() lo fa per te – Emmanuel

6

La soluzione migliore che ho visto è menzionata su questo blog - C#: Equivalent of JavaScript escape function di Kaushik Chakraborti. C'è molto altro da sfuggire a javascript piuttosto che semplicemente la codifica dell'URL o la sostituzione di spazi con le entità.

+0

+1 Sì la funzione 'escape' è una bestia unica e URLEncode semplicemente non si comporta allo stesso modo. –

+0

@Dan Diplo: thnx amico, ma l'ho già visto, non usare – FosterZ

+0

Nella risposta che ho postato, ho incluso il codice da Reflector per questa funzione –

4

seguito è l'implementazione escape funzione che si può trovare in 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(); 
} 

codice preso dal riflettore.

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

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

La soluzione migliore che ho visto è citato su questo blog - C#: Equivalente della funzione fuga JavaScript Kaushik Chakraborti. C'è molto altro da sfuggire a javascript piuttosto che semplicemente la codifica dell'URL o la sostituzione di spazi con le entità.

Ho notato un'altra soluzione nei commenti dell'articolo KodeSharp che potrebbe essere migliore. Il commento dice che è più compatibile con UTF-8 e non richiede il riferimento a JScript. È meglio questo?

(Dipendente System.Web.Extensions.dll)

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

Ho provato questa soluzione, ma Javascript unescape non l'ha "deserializzato". Dovrei buttarlo nel Refelector per vedere cosa fa veramente. – evodev

21

È possibile utilizzare:

string encoded = HttpUtility.JavaScriptStringEncode(str); 

Nota: Avete bisogno di almeno ASP.NET 4.0 per eseguire il codice di cui sopra .