2010-03-23 38 views
8

một thay thế cho chức năng thoát javascript trong C# cho ví dụ như giả sử một chuỗi: "Hi Foster của tôi đang thiếu/bạn" sẽ cung cấp cho "Hi% 20Foster% 27s% 20i% 27m% 20missing% 20/bạn "nếu chúng ta sử dụng chức năng thoát javascript, nhưng thay thế cho C# là gì. tôi đã tìm kiếm nó nhưng không sử dụng.C# thay thế cho chức năng thoát javascript

+0

bạn đang cố gắng làm gì? –

+0

guys, tôi đã thử nghiệm followin 'nhưng không ai trong số họ thay thế báo giá duy nhất "'". Uri.EscapeDataString ("một số văn bản") Uri.EscapeUriString ("một số văn bản") System.Web.HttpUtility.UrlEncode ("một số văn bản") System.Web.HttpUtility.UrlPathEncode ("một số thext") – FosterZ

Trả lời

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

Điều này sẽ thay thế tất cả "" bằng "% 20".

Đây có phải là những gì bạn muốn không?

+3

HttpUtility.UrlEncode() thực hiện điều đó cho bạn – Emmanuel

6

Giải pháp tốt nhất mà tôi đã xem được đề cập trên blog này - C#: Equivalent of JavaScript escape function bởi Kaushik Chakraborti. Có nhiều hơn để thoát javascript hơn chỉ đơn giản là mã hóa url hoặc thay thế không gian với các thực thể.

+0

+1 Có chức năng 'escape' là một con thú duy nhất và URLEncode đơn giản là không hoạt động giống nhau. –

+0

@Dan Diplo: thnx buddy, nhưng tôi đã thấy rằng, không sử dụng – FosterZ

+0

Trong câu trả lời tôi đã đăng, tôi đã đưa mã từ Reflector cho hàm này –

4

Tiếp theo là việc thực hiện escape chức năng mà bạn sẽ tìm thấy trong 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(); 
} 

Mã lấy từ Reflector.

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

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

Giải pháp tốt nhất mà tôi đã nhìn thấy được đề cập trên blog này - C#: tương đương về chức năng thoát JavaScript bằng cách Kaushik Chakraboti. Có nhiều hơn để thoát javascript hơn chỉ đơn giản là mã hóa url hoặc thay thế không gian với các thực thể.

Tôi nhận thấy một giải pháp khác trong các nhận xét trong bài viết KodeSharp có thể tốt hơn. Nhận xét cho biết nó tương thích hơn với UTF-8 và không yêu cầu tham chiếu đến JScript. Tốt hơn chưa?

(Phụ thuộc vào System.Web.Extensions.dll)

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

Tôi đã thử giải pháp này, nhưng unescape Javascript không "deserialize" nó. Tôi sẽ phải ném nó vào Refelector để xem nó thực sự làm gì. – evodev

21

Bạn có thể sử dụng:

string encoded = HttpUtility.JavaScriptStringEncode(str); 

Lưu ý: Bạn cần ít nhất ASP.NET 4.0 để chạy mã trên .

Các vấn đề liên quan