[C#] C #은 JavaScript의 encodeURIComponent ()와 동등합니까?

자바 스크립트에서 :

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

C # 응용 프로그램과 동등한 기능이 있습니까? HTML 문자를 이스케이프 처리하기 위해 사용했습니다.

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

그러나 JS가 사용하는 올바른 16 진수 형식으로 일치를 변환하는 방법을 잘 모르겠습니다. 예를 들어이 코드는 다음과 같습니다.

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

대신에 ” %a9%221a"을 ( "©√"를) 반환합니다 "%C2%A9%E2%88%9A". 문자열을 바이트 또는 다른 것으로 분할해야하는 것 같습니다.

편집 : 이것은 윈도우 앱이다에서 사용할 수있는 유일한 항목 System.Web:있다 AspNetHostingPermission, AspNetHostingPermissionAttribute하고 AspNetHostingPermissionLevel.



답변

Uri.EscapeDataString또는 HttpUtility.UrlEncodeURL의 일부인 문자열을 이스케이프 처리하는 올바른 방법입니다.

예를 들어 문자열을 보자 "Stack Overflow".

  • HttpUtility.UrlEncode("Stack Overflow") -> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow")-> 또한 인코딩 "+" to "%2b"—->Stack%20%2B%20%20Overflow

URL의 실제 부분으로 사용될 때 마지막 문자열 만 정확합니다 (쿼리 문자열 매개 변수 중 하나의 값이 아닌)


답변

HttpUtility.HtmlEncode/ 디코딩
HttpUtility.UrlEncode/ 디코딩

System.Web프로젝트에서 사용할 수없는 어셈블리 에 대한 참조를 추가 할 수 있습니다


답변

나는 C #을 위해 javascript의 encodeURIComponent와 완벽하게 호환되는 아날로그를 시도했지만 4 시간 동안 실험 한 후에 이것을 발견했다.

C # 코드 :

string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");

결과 :
! % 40 % 23 % 24 % 25 % 5e % 26 * () _ % 2b % 20some % 20text % 20here % 20 % d0 % b0 % d0 % bb % d0 % b8 % 20 % d0 % bc % d0 % b0 % d0 % bc % d0 % b5 % d0 % b4 % d0 % be % d0 % b2 % 20 % d0 % b1 % d0 % b0 % d0 % ba % d1 % 83

Javascript의 decodeURLComponent ()로 디코딩 한 후;

당신은 이것을 얻을 것입니다 :
! @ # $ % ^ & * () _ + 여기에 일부 텍스트 али мамедов баку

관심을 가져 주셔서 감사합니다


답변

System.Uri.EscapeUriString ()은 아무것도하지 않는 것 같지만 System.Uri.Escape Data String ()은 저에게 효과적 이었습니다.


답변

객체에 액세스 할 수없는 경우 Server.UrlEncode()또는 예 System.Web.HttpUtility.UrlEncode()를 들어 보십시오 Server. 어셈블리에 System.Uri.EscapeUriString()참조를 추가하지 않도록 사용할 수도 있습니다 System.Web.


답변

Windows 스토어 앱의 경우 HttpUtility가 없습니다. 대신, 당신은 :

URI의 경우 ‘?’앞 :

  • 체계. Uri.EscapeUriString ( “example.com/Stack Overflow ++?”)
    • -> “example.com/Stack%20Overflow++?”

‘?’다음에 오는 URI 쿼리 이름 또는 값의 경우 :

  • 체계. Uri.EscapeDataString ( “스택 오버플로 ++”)
    • -> “스택 % 20 오버플로 % 2B % 2B”

A의 x-www-form-urlencoded를 게시물 내용의 쿼리 이름 또는 값 :

  • System.Net. WebUtility.UrlEncode ( “스택 오버플로 ++”)
    • -> “스택 + 오버플로 % 2B % 2B”

답변

System.Web 네임 스페이스에서 Server 개체를 사용할 수 있습니다.

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode 및 Server.HtmlDecode.

편집 : 포스터는 이것이 웹 응용 프로그램이 아니라 웹 응용 프로그램이 아니라고 Windows 응용 프로그램이라고 덧붙였습니다. 위에 나열된 항목은 프로젝트에 대한 참조로 추가해야하는 System.Web의 HttpUtility 클래스에서 사용할 수 있습니다.