sourcecode

C#은 JavaScript 인코딩과 동등합니까?URIComponent()?

copyscript 2023. 4. 14. 22:01
반응형

C#은 JavaScript 인코딩과 동등합니까?URIComponent()?

JavaScript의 경우:

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프로젝트에서 사용할 수 없는 경우 어셈블리

javascript 인코딩의 완전한 호환성을 위해 노력했습니다.c#의 URIComponent와 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%d0%d0%bb8%d0%d0%d0%bc%d0%d0%d0%b%d0%d0%d0%d0%d0%d0%d0%d0%d0%d0%d%%d%d%d%%d%%%%%%d%%d0%d%d%d%d%%%d0%%d%d%d2%%%%%%%

Javascript의 디코딩으로 디코딩한 후URL 구성 요소();

다음과 같이 됩니다:!@#$%^&*()_+ 여기 텍스트가 있습니다.

경청해 주셔서 감사합니다.

System.Uri.EscapeUriString()은 아무것도 하지 않은 것 같습니다만, 시스템입니다.URI.EscapeDataString()이 작동했습니다.

해라Server.UrlEncode(), 또는System.Web.HttpUtility.UrlEncode()예를 들어, 에 액세스 할 수 없는 경우Server물건.를 사용할 수도 있습니다.System.Uri.EscapeUriString()참조가 추가되는 것을 피하기 위해System.Web어셈블리

Windows Store 앱의 경우 HttpUtility를 사용할 수 없습니다.대신 다음과 같은 이점이 있습니다.

URI의 경우 '?' 앞:

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

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

  • System.Uri.Escape Data String("스택 오버플로우++")
    • -> "스택%20오버플로우%2B%2B"

x-www-form-urlencoded 쿼리 이름 또는 값의 경우 POST 내용:

  • System.Net.Web Utility.UrlEncode("스택 오버플로우++")
    • -> "스택+오버플로우%2B%2B"

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

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

편집: 포스터는 윈도 어플리케이션이며 웹 어플리케이션이 아니라고 덧붙였습니다.위의 항목은 시스템 내의 HttpUtility 클래스에서 사용할 수 있습니다.프로젝트에 대한 참조로 추가해야 하는 웹입니다.

언급URL : https://stackoverflow.com/questions/86477/does-c-sharp-have-an-equivalent-to-javascripts-encodeuricomponent

반응형