2017-12-11 15 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

及びリンクはもう動作しません:

問題は、リンクをクリックすると、ブラウザが開きますが、クエリの引数に二重エンコードされていることです。面白いことに、リンクがブラウザにコピー/ペーストされた場合、追加のエンコーディングは(期待通りに)省略されます。 リンク上にマウスを置くと、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を試してみる必要がありますが、ウェブサーバーに問題があるとは想像もできませんでした。

関連する問題