2017-12-11 5 views
0

내 응용 프로그램에서 하이퍼 링크가있는 HTML 전자 메일을 보냅니다. 사용자는 메일 클라이언트의 링크를 클릭 할 수 있어야하고 브라우저가 페이지를 엽니 다. 쉬운 ... 나는 생각했다.HTML 메일의 URL 쿼리 매개 변수 인코딩

이제 링크에는 쿼리 매개 변수에 특수 문자가 포함됩니다. 예 : 두 번째 쿼리 PARAM 값은 id=1234/pid=1000하고 결과 java.net.URLEncoder.encode() D의 URL은

http://example.com/path/?key1=value1&key2=id%3D1234%2Fpid%3D1000

이되고 그리고 이것은 HTML 메일에 포함됩니다 것입니다 :

<html ... 
<head> 
<meta http-equiv=Content-Type content="text/html; charset=unicode"> 
... 
<body lang=EN-US ... 
<a href="http://example.com/path/?key1=value1&ampkey2=id%3D1234%2Fpid%3D1000">link text</a> 
... 

는 (적어도이 볼 수 있습니다 수신 클라이언트의 원시 메일 내용). http://example.com/path/?key1=value1&key2=id%253D1234%252Fpid%253D1000

및 링크가 더 이상 작동하지 않습니다

문제는 링크를 클릭하면 브라우저가 열리지 만 쿼리 PARAMS 이중 인코딩되는 것입니다. 재미있는 점은 링크가 복사/붙여 넣기가 브라우저에 추가 된 경우 인코딩이 생략된다는 것입니다 (예상대로). 링크를 마우스로 가리키면 URL이 디코드되어 표시됩니다. http://example.com/path/?key1=value1&key2=id=1234/pid=1000 (Outlook 및 Thundbird에서 테스트 한 경우 모두 동일한 동작을 나타냄).

제 질문은 무엇이 잘못 되었습니까?

  • 내가 처음 인코딩 한 것이므로 건너 뛰어야합니까?
  • 내가 처음 인코딩 한 것이고 잘못하고있는 것입니까?
  • 메일 클라이언트가 비난하고 있습니까?

URL 인코딩의 작동 방식 및 사용 사례에서 어떤 인코딩이 아닌지에 대한 많은 정보를 찾을 수 있습니다. 감사합니다. .

답변

0

마지막으로 해결했습니다. 메일 또는 메일 클라이언트의 인코딩과 아무 관련이 없지만 서버는 즉각적인 리디렉션을 수행하고 검색어 매개 변수 -> duplicate를 mod_rewrite urlencoding an already urlencoded query string parameter - any way to disable this?으로 변경합니다.

실제로이 문제를 파악하려면 example.com을 사용해 보았을 것입니다.하지만 웹 서버에 문제가 있다고 상상조차 할 수 없었습니다.