C#에는 JavaScript의 encodeURIComponent()와 동일한 기능이 있습니까?
-
01-07-2019 - |
문제
자바스크립트에서:
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"