문제

자바스크립트에서:

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".문자열을 바이트 등으로 분할해야 할 것 같습니다.

편집하다:이것은 Windows 앱용이며 다음에서 사용할 수 있는 유일한 항목입니다. System.Web 이다: AspNetHostingPermission, AspNetHostingPermissionAttribute, 그리고 AspNetHostingPermissionLevel.

도움이 되었습니까?

해결책

Uri.EscapeDataString 또는 HttpUtility.UrlEncode URL의 일부가 될 문자열을 이스케이프하는 올바른 방법입니다.

예를 들어 문자열을 보자 "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%20여기%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데이터String()이 나를 위해 일했습니다.

노력하다 Server.UrlEncode(), 또는 System.Web.HttpUtility.UrlEncode() 예를 들어 Server 물체.당신은 또한 사용할 수 있습니다 System.Uri.EscapeUriString() 참조를 추가하지 않으려면 System.Web 집회.

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

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

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

Windows 스토어 앱의 경우 HttpUtility가 없습니다.대신 다음과 같은 이점이 있습니다.

URI의 경우 '?' 앞에:

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

URI 쿼리 이름 또는 값의 경우 '?' 뒤에:

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

에 대한 x-www-form-urlencoded POST 콘텐츠의 쿼리 이름 또는 값:

  • 시스템.넷.WebUtility.UrlEncode("스택 오버플로++")
    • -> "스택+오버플로우%2B%2B"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top