在HTML邮件中编码URL查询参数

时间:2017-12-11 18:32:15

标签: java html email url encoding

我的应用程序发送带有超链接的HTML电子邮件。用户应该能够单击邮件客户端中的链接,浏览器将打开该页面。容易......我想。

但现在该链接在查询参数中包含特殊字符。例如。第二个查询参数的值为id=1234/pid=1000,生成的java.net.URLEncoder.encode() d网址为

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编码如何工作以及应该如何进行的信息,但不能找到哪些用例的编码。 感谢。

1 个答案:

答案 0 :(得分:0)

终于解决了。它与邮件或邮件客户端中的编码无关,但服务器执行即时重定向并更改查询参数 - &gt; mod_rewrite urlencoding an already urlencoded query string parameter - any way to disable this?的副本。

应该真的尝试过example.com来解决这个问题,但我甚至无法想象这是Web服务器的问题。