2010-03-23 51 views
8

什麼是替代javascript轉義函數在c#中的例如假設一個字符串:「你好福斯特我錯過/你」將給「你好%20Foster%27s%20i%27m%20missing% 20 /你「如果我們使用JavaScript轉義函數,但什麼是替代的C#。我已經找到它,但沒有用。C#替代javascript轉義函數

+0

你想做什麼? – 2010-03-23 13:16:35

+0

夥計們,我已經測試過followin',但沒有一個取代單引號「'」。 Uri.EscapeDataString( 「一些文本」) Uri.EscapeUriString( 「一些文本」) System.Web.HttpUtility.UrlEncode( 「一些文本」) System.Web.HttpUtility.UrlPathEncode( 「一些thext」) – FosterZ 2010-03-23 13:21:41

回答

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

這將用「%20」替換所有「」。

這是你想要的嗎?

+3

HttpUtility.UrlEncode()會替你 – Emmanuel 2010-03-23 13:16:53

6

我看到的最佳解決方案在此博客上提到 - C#: Equivalent of JavaScript escape function由Kaushik Chakraborti提及。除了簡單的url編碼或用實體替換空格外,還有更多的轉義javascript。

+0

+1是的'escape'功能是一種獨特的動物和URLEncode的根本不相同的行爲。 – 2010-03-23 13:20:11

+0

@丹DIPLO:日Thnx哥們,但i'hve已經看到了,沒有用 – FosterZ 2010-03-23 13:24:41

+0

在我張貼的答案,我包括來自反射此功能 – 2010-03-23 13:25:29

4

以下是escape功能的實現,你會發現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(); 
} 

代碼。

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

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

我已經看到了這個博客中提到的最佳解決方案 - C#:通過考希克Chakraborti的JavaScript逃生功能等效。除了簡單的url編碼或用實體替換空格外,還有更多的轉義javascript。

我注意到KodeSharp文章中的另一個解決方案可能更好。該評論表示它與UTF-8更兼容,並且不需要引用JScript。這是否更好?

(取決於System.Web.Extensions.dll)

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

我試過這個解決方案,而是使用Javascript UNESCAPE沒有「反序列化」了。我將不得不把它扔進Refelector,看看它真的做了什麼。 – evodev 2013-07-11 15:13:10

21

您可以使用:

string encoded = HttpUtility.JavaScriptStringEncode(str); 

注:你至少需要ASP.NET 4.0運行上面的代碼。