2009-05-07 4 views
2

나는 URL의 매개 변수를 인코딩하고 다음과 같이 태그의 href를 설정 해요 :여기서 window.open의 문제점은 무엇입니까?

href="javascript:var win=window.open('LayerPreview.aspx?tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d','','width=800,height=600,resizable=no','true');" 

그러나 링크를 클릭하면, LayerPreview.aspx의를 Page_Load에서, 쿼리 문자열이 수정되었습니다 원래 즉 :

tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d' 

이된다 :

tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG+8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A=%3d 

이, 분명히, 나사까지 내 디코딩.

아이디어가 있으십니까?

감사합니다.

Carl.

편집 : 이미 System.Web.HttpUtility.UrlEncode 및 System.Web.HttpUtility.Decode를 사용하고 있습니다.

다음은 작업입니다 :

  1. 는 일반 텍스트 쿼리 문자열을 생성합니다.
  2. 쿼리 문자열을 암호화합니다.
  3. System.Web.HttpUtility.UrlEncode를 통해 실행하십시오. System.Web.HttpUtility.UrlDecode 통해

    1. 실행을 : 쿼리 문자열을 읽을 때

    난 그냥 반대를 할.

  4. 쿼리 문자열의 암호를 해독합니다.
  5. 쿼리 문자열을 읽습니다.

내 웹 응용 프로그램의 모든 곳에서 작동하지만 window.open URL 또는 다른 javascript 메서드에 대한 링크를 처리 할 때는 작동하지 않습니다.

+0

이 게시물을 편집하는 사람들은 읽을 수 없게 만들고 있습니다. 8 ( – Carl

+0

Scunliffe, 형식 변경에 대한 변경 사항을 취소 할 수 있습니까? – Carl

+0

좋아요, 내 자신의 서식을 편집하십시오. – Carl

답변

3

문자열에 이스케이프 처리되는 일부 문자가 포함되어 있습니다. 즉, 나는 당신에게 일어나는 일을 믿습니다. URLEncodeURLDecode을 사용해야 할 수도 있습니다. 그 긴 문자열 (암호화 된 텍스트?)에 어떻게 올라가고 있는지에 따라 JavaScript 또는 서버 측에서이 작업을 수행 할 수 있습니다.

+0

더 특이한 방법은 이스케이프하는 URL 중 일부가 변환 되었습니까? 가끔 % xx가 변환되는 경우가 있습니다. – Eyal

0

원래 검색어 매개 변수에는 몇 %의 퍼센트 기호가 포함되어 있습니다. 내 추측은 이들이 다시 해석된다는 것입니다 (다음 2 ~ 3 자와 함께 URL 인코딩을 위해 google 검색). 이것이 사실이라면 어떻게 든 % 부호를 이스케이프 처리하거나 인코딩 할 수 있는지 확인하십시오.

4

사용 Uri.EscapeDataStringUri.UnescapeDataString Uri.EscapeUriString하지를 (URLEscape가 EscapeUriString과 동일).

urlencode 및 urldecode는 URL 용입니다. urlencode는 공백을 +로 바꾸고 "/"는 URL에 유효한 문자라고 가정하기 때문에 "/"로 남겨 둡니다. urldecode는 역순으로 +를 space로 변환합니다. urldecode는 +가 변환되는 것을 기대하지 않습니다. 나는 또한 그것이 "=="을 가지고있는 유효한 URL을 기대하지 않는다고 상상한다.일반적으로 "x = y"는 "&"으로 구분됩니다. "="두 번 연속해서 의미가 없으므로 하나만 변환했습니다.

하지만 공간으로 변환하거나 다시 변환하지 않으려면 % 2b 등을 원합니다. URL을 벗어나지 않고 URL에있는 데이터 문자열을 이스케이프 처리합니다. .NET에서 Uri.EscapeDataString 및 Uri.UnescapeDataString을 사용하십시오.

("암호화"가 0-9 az AZ + /를 출력하고 있으며, 끝에 ==가있는 총 64 개의 다른 문자가 있습니다. 따라서 "암호화"를 base64만큼 많이 부르지 마십시오. 원본 데이터는 일부입니다. 이진, 그래서 즉, 암호화 된 데이터라고 생각한다.)

http://codeidol.com/csharp/csharpckbk2/Web/Escaping-and-Unescaping-Data-for-the-Web/

0

내가 같은 문제에 직면했다. 이 문제는 href 특성에 window.open을 사용하여 창을 열 때 발생합니다.

자바 스크립트에서 동일한 window.open (으)로 전화하면 동일한 문제가 발생하지 않습니다.

이 문제를 해결하려면 attribute 안에 window.open 함수를 사용하기 전에 url을 두 번 디코딩해야합니다.

그래서 아래에 따라

  • 는 일반 텍스트 쿼리 문자열을 생성 단계를 반복합니다.

  • 쿼리 문자열을 암호화하십시오.

  • System.Web.HttpUtility.UrlEncode을 통해 실행하십시오.

  • System.Web.HttpUtility.UrlEncode을 통해 다시 실행하십시오.