我的应用程序发送带有超链接的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&key2=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 :(得分:0)
终于解决了。它与邮件或邮件客户端中的编码无关,但服务器执行即时重定向并更改查询参数 - &gt; mod_rewrite urlencoding an already urlencoded query string parameter - any way to disable this?的副本。
应该真的尝试过example.com来解决这个问题,但我甚至无法想象这是Web服务器的问题。