Yahoo邮件中的URI编码组成链接

时间:2009-10-27 17:16:47

标签: yahoo

我有链接生成网络应用程序。我希望用户能够轻松地使用gmail,yahoo mail等将他们创建的链接通过电子邮件发送给其他人。雅虎邮件有一个特殊的怪癖,我需要一个解决方法。

如果您有Yahoo帐户,请点击以下链接:

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

请注意,yahoo会重定向到特定的邮件服务器(例如http://us.mc431.mail.yahoo.com/mc/compose)。就像这样,它解码十六进制代码。其中之一,%23,是一个哈希符号,在查询字符串参数值中不合法。 %23之后的所有信息都将丢失。

我的所有链接都被破坏了,只是使用其他角色不是一种选择。

致电us.mc431.yahoo.com可以直接为我工作,但可能不适合所有用户,具体取决于他们的位置。

我已尝试设置html = true | false,将网址放在html标记中。什么都行不通。对于这个特殊的怪癖,任何人都有可靠的解决方法吗?

注意:任何基于服务器的解决方法对我来说都不是首发。这必须是雅虎和最终用户之间的链接。

由于

4 个答案:

答案 0 :(得分:4)

我是这样做的:

  1. 在这些字符上运行window.escape& ' " # > < \

  2. 在完整字符串上运行encodeURIComponent

  3. 它适用于我的大多数情况。虽然换行(\n)仍然是一个问题,但我在我的情况下用空格替换\ n并且它工作正常。

答案 1 :(得分:3)

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

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

所以你的URI将是:
http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%2523anchor

同样的解决方法可用于&符号。如果您只将其编码为%26,那么雅虎会将其转换为“&amp; amp;”这将丢弃其余的消息。与上述程序相同 - 将%26更改为%2526。

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

答案 2 :(得分:3)

对于换行符,请将换行符添加为&lt; BR&gt; 并对其进行双重编码,它在新消息中成功解释为新行

答案 3 :(得分:1)

我认为雅虎服务器在发布HTTP重定向时会做什么。似乎应该保留重定向上转义的URL,但事实并非如此。但是,如果不知道它们的基础应用程序,就很难说它为什么不会。也许,这只是一个意想不到的副作用(或错误),或者该页面上的某些Javascript功能要求他们使用散列标签进行一些操作。