2010-03-23 3 views
8

C#에서 자바 스크립트 이스케이프 함수 대신 사용할 수있는 대체 문자열은 무엇입니까? 예를 들어 문자열을 가정합니다. "하이 포스터가 실종되었습니다/당신"은 "안녕하세요 % 20Foster % 27s % 20i % 27m % 20missing % 20/당신 "우리는 자바 스크립트 이스케이프 함수를 사용하지만, C#에 대한 대안은 무엇입니까. 나는 그것을 찾았지만 아무 쓸모가 없다.자바 스크립트 이스케이프 함수에 대한 C# 대안

+0

무엇을하려고합니까? –

+0

남자, 나는 followin '테스트를했지만 그들 중 누구도 작은 따옴표 "'"를 대체하지 않습니다. Uri.EscapeDataString ("텍스트") Uri.EscapeUriString ("텍스트") System.Web.HttpUtility.UrlEncode ("텍스트") System.Web.HttpUtility.UrlPathEncode ("일부 thext") – FosterZ

답변

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

이렇게하면 "% 20"이 (가) ""로 바뀝니다.

원하는 게 맞습니까?

+3

HttpUtility.UrlEncode()는 이것을 수행합니다 – Emmanuel

6

내가 본 최고의 해결책은이 블로그에 언급되어 있습니다. C#: Equivalent of JavaScript escape function Kaushik Chakraborti. 자바 스크립트를 단순히 이스케이프하는 것보다 url 인코딩을 사용하거나 공백을 엔터티로 바꾸는 것 이상의 것이 있습니다.

+0

+1 예 'escape' 함수는 고유 한 짐승이며 URLEncode는 단순히 동일하게 동작하지 않습니다. –

+0

@Dan Diplo : thnx 버디,하지만 난 이미 그것을 보았다. 아무 것도 사용하지 않았다. – FosterZ

+0

내가 게시 한 답변에서이 기능에 대한 리플렉터 코드를 포함했다. –

4

다음은 Microsoft.JScript.dll에서 찾을 수 escape 기능 구현 ... 리플렉터에서 촬영

[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 번호 : Kaushik이 Chakraborti하여 자바 스크립트의 탈출 기능과 동일합니다. 자바 스크립트를 단순히 이스케이프하는 것보다 url 인코딩을 사용하거나 공백을 엔터티로 바꾸는 것 이상의 것이 있습니다.

나는 KodeSharp 기사의 또 다른 해답을 발견했습니다. 이 주석은 UTF-8과 더 잘 호환되며 JScript에 대한 참조가 필요 없다고 말합니다. 이게 더 좋은가요?

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

이 솔루션을 사용해 보았지만 Javascript unescape은 "deserialize"하지 않았습니다. 리셀러에게 실제로 무엇을하는지 보려면 그것을 던져야합니다. – evodev

21

(종속 System.Web.Extensions.dll)에

당신은 사용할 수 있습니다

string encoded = HttpUtility.JavaScriptStringEncode(str); 

참고 : 당신은 적어도 ASP.NET 4.0 위의 코드를 실행해야 .

관련 문제