【问题标题】:URI encoding in Yahoo mail compose link雅虎邮件撰写链接中的 URI 编码
【发布时间】:2009-10-27 17:16:46
【问题描述】:

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

如果您有雅虎邮箱帐户,请点击此链接:

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 标记中。没有任何效果。对于这个特殊的怪癖,有人有可靠的解决方法吗?

注意:任何基于服务器的解决方法对我来说都是行不通的。这必须是仅在 Yahoo 和最终用户之间的链接。

谢谢

【问题讨论】:

    标签: yahoo


    【解决方案1】:

    这是我的做法:

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

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

    它适用于我的大部分情况。虽然换行符 (\n) 仍然是一个问题,但在我的情况下,我将 \n 替换为空格并且效果很好。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • %25 和 %23 的组合对我有用:http://example.com?foo=%25&bar=http://example.com/%23/baz
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我认为,当 Yahoo 的服务器发出 HTTP 重定向时,您会受到它的影响。似乎它应该保留在重定向上转义的 URL,但不是。但是,如果不了解它们的底层应用程序,很难说为什么它不会。也许,这只是一个意外的副作用(或错误),或者该页面上的某些 Javascript 功能要求他们对哈希标签进行一些处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-27
          • 1970-01-01
          • 1970-01-01
          • 2015-01-23
          • 1970-01-01
          • 2010-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多