雅虎邮件撰写链接中的URI编码

4
我有一个链接生成的网络应用程序。我想让用户通过Gmail、Yahoo Mail等电子邮件向其他人发送他们创建的链接变得更加容易。Yahoo Mail有一个特殊的问题,我需要解决它。
如果您有Yahoo Mail帐户,请跟随此链接:

http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%23anchor

请注意,雅虎会重定向到特定的邮件服务器(例如 http://us.mc431.mail.yahoo.com/mc/compose)。在此过程中,它会解码十六进制代码。其中一个代码“%23”是一个哈希符号,在查询字符串参数值中不合法。%23之后的所有信息都将丢失。
我的所有链接都已损坏,而仅仅使用另一个字符并不是一个选项。
直接调用us.mc431.yahoo.com对我有效,但可能不适用于所有用户,这取决于他们的位置。
我尝试过设置html=true|false,将URL放入html标记中,但都没有奏效。是否有人有这个特殊问题的可靠解决方法?
注意:任何基于服务器的解决方法对我来说都是不可行的。这必须是一条链接,只在雅虎和最终用户之间。
谢谢
4个回答

4
这是我做的方法:
  1. 对这些字符运行 window.escape& ' " # > < \

  2. 对整个字符串应用 encodeURIComponent

对于我大部分情况来说,它起作用了。尽管换行符(\n)仍然是个问题,但在我的情况下,我将 \n 替换为空格,这样它就正常工作了。

3

对于换行符,将其添加为<BR>并进行双重编码,这样在新消息中它将被成功解释为换行符。


3

我最近几个小时一直在处理同样的问题,我找到了一个解决方法!

如果你双重编码锚点,雅虎将正确解释它。这意味着将%23更改为%2523(百分号为%25编码)。

因此,您的URI将是:
http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%2523anchor

对于“&”也可以使用相同的解决方法。如果您只将其编码为%26,则雅虎将将其转换为“&amp;”,这将丢弃消息的其余部分。与上述过程相同-将%26更改为%2526。

不过,我仍然没有找到换行符问题的解决方案(%0D和%0A)。


1
%25和%23的组合对我起作用了:http://example.com?foo=%25&bar=http://example.com/%23/baz - Paul Sweatte

1

我认为你在受制于Yahoo服务器在发出HTTP重定向时所做的事情。它似乎应该保留重定向上的URL转义,但实际上并没有这样做。然而,如果没有了解他们底层应用程序的知识,很难说为什么不会这样做。也许这只是一个无意的副作用(或错误),或者也许该页面上的某些Javascript功能需要他们对哈希标签进行一些调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接